QRecursiveMutex#
The QRecursiveMutex
class provides access serialization between threads. More…
Synopsis#
Functions#
Note
This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE
Detailed Description#
The QRecursiveMutex
class is a mutex, like QMutex
, with which it is API-compatible. It differs from QMutex
by accepting lock()
calls from the same thread any number of times. QMutex
would deadlock in this situation.
QRecursiveMutex
is much more expensive to construct and operate on, so use a plain QMutex
whenever you can. Sometimes, one public function, however, calls another public function, and they both need to lock the same mutex. In this case, you have two options:
Factor the code that needs mutex protection into private functions, which assume that the mutex is held when they are called, and lock a plain
QMutex
in the public functions before you call the private implementation ones.Or use a recursive mutex, so it doesn’t matter that the first public function has already locked the mutex when the second one wishes to do so.
See also
QMutex
QMutexLocker
QReadWriteLock
QSemaphore
QWaitCondition
- class PySide6.QtCore.QRecursiveMutex#
Constructs a new recursive mutex. The mutex is created in an unlocked state.
- PySide6.QtCore.QRecursiveMutex.lock()#
Locks the mutex. If another thread has locked the mutex then this call will block until that thread has unlocked it.
Calling this function multiple times on the same mutex from the same thread is allowed.
See also
- PySide6.QtCore.QRecursiveMutex.tryLock([timer={}])#
- Parameters:
timer –
PySide6.QtCore.QDeadlineTimer
- Return type:
bool
Attempts to lock the mutex. This function returns true
if the lock was obtained; otherwise it returns false
. If another thread has locked the mutex, this function will wait until timeout
expires for the mutex to become available.
If the lock was obtained, the mutex must be unlocked with unlock()
before another thread can successfully lock it.
Calling this function multiple times on the same mutex from the same thread is allowed.
- PySide6.QtCore.QRecursiveMutex.tryLock(timeout)
- Parameters:
timeout – int
- Return type:
bool
Attempts to lock the mutex. This function returns true
if the lock was obtained; otherwise it returns false
. If another thread has locked the mutex, this function will wait for at most timeout
milliseconds for the mutex to become available.
Note: Passing a negative number as the timeout
is equivalent to calling lock()
, i.e. this function will wait forever until mutex can be locked if timeout
is negative.
If the lock was obtained, the mutex must be unlocked with unlock()
before another thread can successfully lock it.
Calling this function multiple times on the same mutex from the same thread is allowed.
- PySide6.QtCore.QRecursiveMutex.try_lock()#
- Return type:
bool
Attempts to lock the mutex. This function returns true
if the lock was obtained; otherwise it returns false
.
This function is provided for compatibility with the Standard Library concept Lockable
. It is equivalent to tryLock()
.
- PySide6.QtCore.QRecursiveMutex.unlock()#
Unlocks the mutex. Attempting to unlock a mutex in a different thread to the one that locked it results in an error. Unlocking a mutex that is not locked results in undefined behavior.
See also