QRecursiveMutex Class
La classe QRecursiveMutex assure la sérialisation des accès entre les threads. En savoir plus...
| 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 des classes de gestion des threads.
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, tout comme QMutex, avec lequel elle est compatible au niveau de l’API. Elle se distingue de QMutex en acceptant un nombre illimité d’appels à lock() provenant du même thread. QMutex entraînerait un blocage dans cette situation.
La construction et l’utilisation de `QRecursiveMutex` sont beaucoup plus coûteuses ; utilisez donc un simple ` QMutex ` dès que possible. Il arrive toutefois qu’une fonction publique appelle une autre fonction publique et que les deux aient besoin de verrouiller le même mutex. Dans ce cas, deux options s’offrent à vous :
- Décomposez le code nécessitant la protection du mutex en fonctions privées, qui partent du principe que le mutex est verrouillé lorsqu’elles sont appelées, et verrouillez un « QMutex » standard dans les fonctions publiques avant d’appeler les fonctions d’implémentation privées.
- Ou bien utilisez un mutex récursif, de sorte que le fait que la première fonction publique ait déjà verrouillé le mutex n’ait aucune importance lorsque la seconde souhaite le faire.
Voir également QMutex, QMutexLocker, QReadWriteLock, QSemaphore et QWaitCondition.
Documentation des fonctions membres
[constexpr noexcept default] QRecursiveMutex::QRecursiveMutex()
Crée un nouveau mutex récursif. Le mutex est créé dans un état déverrouillé.
Voir également lock() et unlock().
[noexcept] QRecursiveMutex::~QRecursiveMutex()
Détruit le mutex.
Avertissement : 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 restera bloqué jusqu'à ce que ce thread l'ait déverrouillé.
Il est permis d’appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Remarque : cette fonction est de type « noexcept » lorsque ` LockIsNoexcept ` est défini comme ` 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 le délai d'expiration de ` timeout ` soit écoulé pour que le mutex devienne disponible.
Si le verrou a été obtenu, le mutex doit être déverrouillé à l’aide de unlock() avant qu’un autre thread puisse le verrouiller avec succès.
Il est autorisé 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.
Remarque : cette fonction est de type « noexcept » lorsque LockIsNoexcept est true.
Voir également 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 que le mutex se libère.
Remarque : passer un nombre négatif comme timeout revient à 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é à l’aide de ` unlock()` avant qu’un autre thread puisse le verrouiller avec succès.
Il est autorisé d’appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Remarque : cette fonction est de type « 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 de type « noexcept » lorsque ` LockIsNoexcept ` est égal à ` 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 que le mutex se libère.
Remarque : passer une durée négative comme argument à duration revient à appeler try_lock(). Ce comportement diffère de celui de tryLock().
Si le verrou a été obtenu, le mutex doit être déverrouillé à l’aide de unlock() avant qu’un autre thread puisse le verrouiller avec succès.
Il est autorisé d’appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Voir également 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’à ce que ` timePoint ` pour que le mutex devienne disponible.
Remarque : passer un timePoint qui a déjà été libéré revient à appeler try_lock(). Ce comportement diffère de celui de tryLock().
Si le verrou a été obtenu, le mutex doit être déverrouillé à l’aide de unlock() avant qu’un autre thread puisse le verrouiller avec succès.
Il est autorisé d’appeler cette fonction plusieurs fois sur le même mutex à partir du même thread.
Voir également lock() et unlock().
[noexcept] void QRecursiveMutex::unlock()
Déverrouille le mutex. Toute tentative de déverrouillage d'un mutex dans un thread différent de celui qui l'a verrouillé entraîne une erreur. Le déverrouillage d'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.