class QRecursiveMutex#

QRecursiveMutex类提供了线程间访问序列化。更多信息...

概要#

方法#

备注

此文档可能包含从C++自动翻译到Python的片段。我们总是欢迎对片段翻译的贡献。如果您在翻译中遇到问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建票据来告知我们。

详细说明#

QRecursiveMutex 是一个互斥锁,与 QMutex 类相同,API 兼容。它通过接受相同线程的多次 lock() 调用来与 QMutex 区别。在这种情况下,QMutex 将会发生死锁。

QRecursiveMutex 的构建和操作代价更高,所以尽可能使用普通的 QMutex。但有时,一个公共函数调用另一个公共函数,它们都需要锁定相同的互斥锁。在这种情况下,你有两种选择

  • 将需要互斥锁保护的代码分解成私有函数,这些函数假定在它们被调用时互斥锁已被持有,然后在调用私有实现之前,在公共函数中使用普通 QMutex 锁定。

  • 或者使用递归互斥锁,这样就不用担心第一个公共函数在第二个函数想要锁定互斥锁时已经锁定它。

另请参阅

QMutex QMutexLocker QReadWriteLock QSemaphore QWaitCondition

__init__()#

构造一个新的递归互斥锁。互斥锁以未锁定的状态创建。

另请参阅

lock() unlock()

lock()#

锁定互斥锁。如果其他线程已经锁定互斥锁,则此调用将阻塞,直到该线程解锁。

允许在相同互斥锁上有相同线程多次调用此函数。

另请参阅

unlock()

tryLock([timer={}])#
参数:

timerQDeadlineTimer

返回类型:

bool

尝试锁定互斥锁。此函数如果成功获取锁则返回 true,否则返回 false。如果其他线程已经锁定互斥锁,此函数将等待直到 timeout 到期,互斥锁可用。

如果获取了锁,必须在另一个线程成功锁定之前使用unlock() 来释放互斥锁。

允许在相同互斥锁上有相同线程多次调用此函数。

另请参阅

lock() unlock()

tryLock(timeout)
参数:

timeout – int

返回类型:

bool

尝试锁定互斥锁。此函数如果获取了锁则返回 true,否则返回 false。如果其他线程已经锁定互斥锁,此函数将最多等待 timeout 毫秒直到互斥锁可用。

注意:将负数作为 timeout 相当于调用 lock(),即如果 timeout 为负,此函数将无限期等待直到可以锁定互斥锁。

如果获取了锁,必须在另一个线程成功锁定之前使用unlock() 来释放互斥锁。

允许在相同互斥锁上有相同线程多次调用此函数。

另请参阅

lock() unlock()

try_lock()#
返回类型:

bool

尝试锁定互斥锁。此函数如果获取了锁则返回 true,否则返回 false

此函数提供以与标准库中的 Lockable 概念兼容。它等价于 tryLock()

unlock()#

解锁互斥锁。在锁定互斥锁的线程之外尝试解锁会导致错误。尝试解锁未锁定的互斥锁会导致未定义的行为。

另请参阅

lock()