- 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 兼容。它通过接受相同线程的多次lock()调用来与QMutex区别。在这种情况下,QMutex将会发生死锁。QRecursiveMutex的构建和操作代价更高,所以尽可能使用普通的QMutex。但有时,一个公共函数调用另一个公共函数,它们都需要锁定相同的互斥锁。在这种情况下,你有两种选择将需要互斥锁保护的代码分解成私有函数,这些函数假定在它们被调用时互斥锁已被持有,然后在调用私有实现之前,在公共函数中使用普通
QMutex锁定。或者使用递归互斥锁,这样就不用担心第一个公共函数在第二个函数想要锁定互斥锁时已经锁定它。
另请参阅
QMutexQMutexLockerQReadWriteLockQSemaphoreQWaitCondition- __init__()#
构造一个新的递归互斥锁。互斥锁以未锁定的状态创建。
- lock()#
锁定互斥锁。如果其他线程已经锁定互斥锁,则此调用将阻塞,直到该线程解锁。
允许在相同互斥锁上有相同线程多次调用此函数。
另请参阅
- tryLock([timer={}])#
- 参数:
timer –
QDeadlineTimer- 返回类型:
bool
尝试锁定互斥锁。此函数如果成功获取锁则返回
true,否则返回false。如果其他线程已经锁定互斥锁,此函数将等待直到timeout到期,互斥锁可用。如果获取了锁,必须在另一个线程成功锁定之前使用
unlock()来释放互斥锁。允许在相同互斥锁上有相同线程多次调用此函数。
- tryLock(timeout)
- 参数:
timeout – int
- 返回类型:
bool
尝试锁定互斥锁。此函数如果获取了锁则返回
true,否则返回false。如果其他线程已经锁定互斥锁,此函数将最多等待timeout毫秒直到互斥锁可用。注意:将负数作为
timeout相当于调用lock(),即如果timeout为负,此函数将无限期等待直到可以锁定互斥锁。如果获取了锁,必须在另一个线程成功锁定之前使用
unlock()来释放互斥锁。允许在相同互斥锁上有相同线程多次调用此函数。
- try_lock()#
- 返回类型:
bool
尝试锁定互斥锁。此函数如果获取了锁则返回
true,否则返回false。此函数提供以与标准库中的
Lockable概念兼容。它等价于tryLock()。- unlock()#
解锁互斥锁。在锁定互斥锁的线程之外尝试解锁会导致错误。尝试解锁未锁定的互斥锁会导致未定义的行为。
另请参阅