PySide6.QtCore.QRecursiveMutex

class QRecursiveMutex

QRecursiveMutex 类提供了线程之间的访问序列化。更多

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

QRecursiveMutex 类是一个互斥锁,类似于 QMutex,并且与它 API 兼容。它与 QMutex 的不同之处在于,它允许同一线程多次调用 lock()。在这种情况下,QMutex 会发生死锁。

QRecursiveMutex 的构建和操作成本要高得多,因此尽可能使用普通的 QMutex。然而,有时一个公共函数会调用另一个公共函数,并且它们都需要锁定同一个互斥锁。在这种情况下,你有两个选择:

  • 将需要互斥保护的代码分解为私有函数,这些函数在被调用时假设互斥锁已被持有,并在调用私有实现函数之前在公共函数中锁定一个普通的QMutex

  • 或者使用递归互斥锁,这样当第二个公共函数希望锁定互斥锁时,第一个公共函数已经锁定了互斥锁也没关系。

另请参阅

QMutex QMutexLocker QReadWriteLock QSemaphore QWaitCondition

__init__()

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

另请参阅

lock() unlock()

lock()

锁定互斥锁。如果另一个线程已经锁定了互斥锁,则此调用将阻塞,直到该线程解锁它。

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

另请参阅

unlock()

tryLock([timer={}])
Parameters:

定时器QDeadlineTimer

Return type:

布尔

尝试锁定互斥锁。如果成功获取锁,此函数将返回true;否则返回false。如果另一个线程已经锁定了互斥锁,此函数将等待直到timeout超时,互斥锁变为可用。

如果锁被获取,互斥锁必须在使用unlock()解锁之前,另一个线程才能成功锁定它。

允许在同一线程中多次调用此函数。

另请参阅

lock() unlock()

tryLock(timeout)
Parameters:

timeout – int

Return type:

布尔

尝试锁定互斥锁。如果成功获取锁,此函数将返回true;否则返回false。如果另一个线程已经锁定了互斥锁,此函数将最多等待timeout毫秒,直到互斥锁变为可用。

注意:将负数作为timeout传递等同于调用lock(),即如果timeout为负数,此函数将永远等待,直到互斥锁可以被锁定。

如果锁被获取,互斥锁必须在使用unlock()解锁之前,另一个线程才能成功锁定它。

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

另请参阅

lock() unlock()

try_lock()
Return type:

布尔

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

此函数是为了与标准库概念Lockable兼容而提供的。它等同于tryLock()

unlock()

解锁互斥锁。尝试在不同于锁定它的线程中解锁互斥锁会导致错误。解锁未锁定的互斥锁会导致未定义行为。

另请参阅

lock()