PySide6.QtCore.QRecursiveMutex¶
- class QRecursiveMutex¶
QRecursiveMutex
类提供了线程之间的访问序列化。更多…概要¶
方法¶
def
__init__()
def
lock()
def
tryLock()
def
try_lock()
def
unlock()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
QRecursiveMutex
类是一个互斥锁,类似于QMutex
,并且与它 API 兼容。它与QMutex
的不同之处在于,它允许同一线程多次调用lock()
。在这种情况下,QMutex
会发生死锁。QRecursiveMutex
的构建和操作成本要高得多,因此尽可能使用普通的QMutex
。然而,有时一个公共函数会调用另一个公共函数,并且它们都需要锁定同一个互斥锁。在这种情况下,你有两个选择:将需要互斥保护的代码分解为私有函数,这些函数在被调用时假设互斥锁已被持有,并在调用私有实现函数之前在公共函数中锁定一个普通的
QMutex
。或者使用递归互斥锁,这样当第二个公共函数希望锁定互斥锁时,第一个公共函数已经锁定了互斥锁也没关系。
另请参阅
QMutex
QMutexLocker
QReadWriteLock
QSemaphore
QWaitCondition
- __init__()¶
构造一个新的递归互斥锁。互斥锁在未锁定状态下创建。
- lock()¶
锁定互斥锁。如果另一个线程已经锁定了互斥锁,则此调用将阻塞,直到该线程解锁它。
允许在同一线程上多次调用同一互斥锁上的此函数。
另请参阅
- tryLock([timer={}])¶
- Parameters:
定时器 –
QDeadlineTimer
- Return type:
布尔
尝试锁定互斥锁。如果成功获取锁,此函数将返回
true
;否则返回false
。如果另一个线程已经锁定了互斥锁,此函数将等待直到timeout
超时,互斥锁变为可用。如果锁被获取,互斥锁必须在使用
unlock()
解锁之前,另一个线程才能成功锁定它。允许在同一线程中多次调用此函数。
- tryLock(timeout)
- Parameters:
timeout – int
- Return type:
布尔
尝试锁定互斥锁。如果成功获取锁,此函数将返回
true
;否则返回false
。如果另一个线程已经锁定了互斥锁,此函数将最多等待timeout
毫秒,直到互斥锁变为可用。注意:将负数作为
timeout
传递等同于调用lock()
,即如果timeout
为负数,此函数将永远等待,直到互斥锁可以被锁定。如果锁被获取,互斥锁必须在使用
unlock()
解锁之前,另一个线程才能成功锁定它。允许在同一线程上多次调用同一互斥锁上的此函数。
- try_lock()¶
- Return type:
布尔
尝试锁定互斥锁。如果成功获取锁,此函数返回
true
;否则返回false
。此函数是为了与标准库概念
Lockable
兼容而提供的。它等同于tryLock()
。- unlock()¶
解锁互斥锁。尝试在不同于锁定它的线程中解锁互斥锁会导致错误。解锁未锁定的互斥锁会导致未定义行为。
另请参阅