QRecursiveMutex Class
La classe QRecursiveMutex permet la sérialisation des accès entre les threads. Plus d'informations...
| En-tête : | #include <QRecursiveMutex> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
- Liste de tous les membres, y compris les membres hérités
- QRecursiveMutex fait partie de Threading Classes.
Remarque : toutes les fonctions de cette classe sont sûres pour les threads.
Fonctions publiques
| QRecursiveMutex() | |
| ~QRecursiveMutex() | |
| void | lock() |
(since 6.6) bool | tryLock(QDeadlineTimer timeout = {}) |
| bool | tryLock(int timeout) |
| bool | try_lock() |
| bool | try_lock_for(std::chrono::duration<Rep, Period> duration) |
| bool | try_lock_until(std::chrono::time_point<Clock, Duration> timePoint) |
| void | unlock() |
Description détaillée
La classe QRecursiveMutex est un mutex, comme QMutex, avec lequel elle est compatible au niveau de l'API. Elle diffère de QMutex en acceptant les appels à lock() du même thread un nombre illimité de fois. QMutex se bloquerait dans cette situation.
QRecursiveMutex est beaucoup plus coûteux à construire et à utiliser, alors utilisez un simple QMutex chaque fois que vous le pouvez. Cependant, il arrive qu'une fonction publique appelle une autre fonction publique et qu'elles aient toutes deux besoin de verrouiller le même mutex. Dans ce cas, vous avez deux options :
- Factoriser le code qui a besoin de la protection du mutex dans des fonctions privées, qui supposent que le mutex est détenu lorsqu'elles sont appelées, et verrouiller un simple QMutex dans les fonctions publiques avant d'appeler les fonctions d'implémentation privées.
- Ou utilisez un mutex récursif, de sorte qu'il importe peu que la première fonction publique ait déjà verrouillé le mutex lorsque la seconde souhaite le faire.
Voir aussi QMutex, QMutexLocker, QReadWriteLock, QSemaphore, et QWaitCondition.
Documentation des fonctions membres
[constexpr noexcept] QRecursiveMutex::QRecursiveMutex()
Construit un nouveau mutex récursif. Le mutex est créé dans un état déverrouillé.
Voir aussi lock() et unlock().
[noexcept] QRecursiveMutex::~QRecursiveMutex()
Détruit le mutex.
Attention : La destruction d'un mutex verrouillé peut entraîner un comportement indéfini.
[noexcept(...)] void QRecursiveMutex::lock()
Verrouille le mutex. Si un autre thread a verrouillé le mutex, cet appel sera bloqué jusqu'à ce que ce thread le déverrouille.
Il est permis d'appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Remarque : cette fonction est noexcept lorsque LockIsNoexcept est true.
Voir aussi unlock().
[noexcept(...), since 6.6] bool QRecursiveMutex::tryLock(QDeadlineTimer timeout = {})
Tente de verrouiller le mutex. Cette fonction renvoie true si le verrou a été obtenu, sinon elle renvoie false. Si un autre thread a verrouillé le mutex, cette fonction attendra que timeout expire pour que le mutex devienne disponible.
Si le verrou a été obtenu, le mutex doit être déverrouillé avec unlock() avant qu'un autre thread puisse le verrouiller avec succès.
Il est permis d'appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Cette fonction a été introduite dans Qt 6.6.
Note : Cette fonction est noexcept lorsque LockIsNoexcept est true.
Voir aussi lock() et unlock().
[noexcept(...)] bool QRecursiveMutex::tryLock(int timeout)
Tente de verrouiller le mutex. Cette fonction renvoie true si le verrou a été obtenu, sinon elle renvoie false. Si un autre thread a verrouillé le mutex, cette fonction attendra au maximum timeout millisecondes pour que le mutex devienne disponible.
Remarque : passer un nombre négatif comme timeout équivaut à appeler lock(), c'est-à-dire que cette fonction attendra indéfiniment que le mutex puisse être verrouillé si timeout est négatif.
Si le verrou a été obtenu, le mutex doit être déverrouillé avec unlock() avant qu'un autre thread puisse le verrouiller avec succès.
Il est permis d'appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Remarque : cette fonction est noexcept lorsque LockIsNoexcept est true.
Voir également lock() et unlock().
[noexcept(...)] bool QRecursiveMutex::try_lock()
Tente de verrouiller le mutex. Cette fonction renvoie true si le verrou a été obtenu, sinon elle renvoie false.
Cette fonction est fournie à des fins de compatibilité avec le concept de la bibliothèque standard Lockable. Elle est équivalente à tryLock().
Remarque : cette fonction est noexcept lorsque LockIsNoexcept est true.
template <typename Rep, typename Period> bool QRecursiveMutex::try_lock_for(std::chrono::duration<Rep, Period> duration)
Tente de verrouiller le mutex. Cette fonction renvoie true si le verrou a été obtenu, sinon elle renvoie false. Si un autre thread a verrouillé le mutex, cette fonction attendra au moins duration pour que le mutex devienne disponible.
Remarque : le fait de passer une durée négative à duration équivaut à appeler try_lock(). Ce comportement diffère de celui de tryLock().
Si le verrou a été obtenu, le mutex doit être déverrouillé avec unlock() avant qu'un autre thread puisse le verrouiller avec succès.
Il est permis d'appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Voir aussi lock() et unlock().
template <typename Clock, typename Duration> bool QRecursiveMutex::try_lock_until(std::chrono::time_point<Clock, Duration> timePoint)
Tente de verrouiller le mutex. Cette fonction renvoie true si le verrou a été obtenu, sinon elle renvoie false. Si un autre thread a verrouillé le mutex, cette fonction attendra au moins jusqu'à timePoint pour que le mutex devienne disponible.
Remarque : passer un timePoint qui a déjà été passé équivaut à appeler try_lock(). Ce comportement diffère de celui de tryLock().
Si le verrou a été obtenu, le mutex doit être déverrouillé avec unlock() avant qu'un autre thread puisse le verrouiller avec succès.
Il est permis d'appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Voir aussi lock() et unlock().
[noexcept] void QRecursiveMutex::unlock()
Déverrouille le mutex. La tentative de déverrouillage d'un mutex dans un thread différent de celui qui l'a verrouillé entraîne une erreur. Déverrouiller un mutex qui n'est pas verrouillé entraîne un comportement indéfini.
Voir également lock().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.