QRecursiveMutex Class
La clase QRecursiveMutex proporciona serialización de acceso entre hilos. Más...
| Cabecera: | #include <QRecursiveMutex> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- Lista de todos los miembros, incluyendo los heredados
- QRecursiveMutex es parte de la clase Threading Classes.
Nota: Todas las funciones de esta clase son thread-safe.
Funciones Públicas
| 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() |
Descripción Detallada
La clase QRecursiveMutex es un mutex, como QMutex, con el que es compatible por API. Se diferencia de QMutex en que acepta llamadas a lock() desde el mismo hilo cualquier número de veces. QMutex se bloquearía en esta situación.
QRecursiveMutex es mucho más caro de construir y operar, así que usa QMutex siempre que puedas. A veces, una función pública, sin embargo, llama a otra función pública, y ambas necesitan bloquear el mismo mutex. En este caso, tienes dos opciones:
- Factorizar el código que necesita protección mutex en funciones privadas, que asumen que el mutex se mantiene cuando son llamadas, y bloquear un QMutex plano en las funciones públicas antes de llamar a las de implementación privada.
- O usa un mutex recursivo, para que no importe que la primera función pública ya haya bloqueado el mutex cuando la segunda desee hacerlo.
Véase también QMutex, QMutexLocker, QReadWriteLock, QSemaphore, y QWaitCondition.
Documentación de funciones miembro
[constexpr noexcept] QRecursiveMutex::QRecursiveMutex()
Construye un nuevo mutex recursivo. El mutex se crea en un estado desbloqueado.
Véase también lock() y unlock().
[noexcept] QRecursiveMutex::~QRecursiveMutex()
Destruye el mutex.
Advertencia: Destruir un mutex bloqueado puede resultar en un comportamiento indefinido.
[noexcept(...)] void QRecursiveMutex::lock()
Bloquea el mutex. Si otro hilo ha bloqueado el mutex entonces esta llamada se bloqueará hasta que ese hilo lo haya desbloqueado.
Se permite llamar a esta función varias veces sobre el mismo mutex desde el mismo thread.
Nota: Esta función es noexcept cuando LockIsNoexcept es true.
Véase también unlock().
[noexcept(...), since 6.6] bool QRecursiveMutex::tryLock(QDeadlineTimer timeout = {})
Intenta bloquear el mutex. Esta función devuelve true si se ha obtenido el bloqueo; en caso contrario, devuelve false. Si otro hilo ha bloqueado el mutex, esta función esperará hasta que timeout expire para que el mutex esté disponible.
Si el bloqueo fue obtenido, el mutex debe ser desbloqueado con unlock() antes de que otro hilo pueda bloquearlo con éxito.
Se permite llamar a esta función varias veces sobre el mismo mutex desde el mismo hilo.
Esta función se introdujo en Qt 6.6.
Nota: Esta función es noexcept cuando LockIsNoexcept es true.
Véase también lock() y unlock().
[noexcept(...)] bool QRecursiveMutex::tryLock(int timeout)
Intenta bloquear el mutex. Esta función devuelve true si se ha obtenido el bloqueo; en caso contrario, devuelve false. Si otro hilo ha bloqueado el mutex, esta función esperará como máximo timeout milisegundos a que el mutex esté disponible.
Nota: Pasar un número negativo como timeout es equivalente a llamar a lock(), es decir, esta función esperará eternamente hasta que el mutex pueda ser bloqueado si timeout es negativo.
Si se obtuvo el bloqueo, el mutex debe ser desbloqueado con unlock() antes de que otro hilo pueda bloquearlo con éxito.
Se permite llamar a esta función varias veces sobre el mismo mutex desde el mismo hilo.
Nota: Esta función es noexcept cuando LockIsNoexcept es true.
Véase también lock() y unlock().
[noexcept(...)] bool QRecursiveMutex::try_lock()
Intenta bloquear el mutex. Esta función devuelve true si se ha obtenido el bloqueo; en caso contrario devuelve false.
Esta función se proporciona por compatibilidad con el concepto de la biblioteca estándar Lockable. Es equivalente a tryLock().
Nota: Esta función es noexcept cuando LockIsNoexcept es true.
template <typename Rep, typename Period> bool QRecursiveMutex::try_lock_for(std::chrono::duration<Rep, Period> duration)
Intenta bloquear el mutex. Esta función devuelve true si se ha obtenido el bloqueo; en caso contrario, devuelve false. Si otro hilo ha bloqueado el mutex, esta función esperará al menos duration para que el mutex esté disponible.
Nota: Pasar una duración negativa como duration es equivalente a llamar a try_lock(). Este comportamiento difiere de tryLock().
Si el bloqueo fue obtenido, el mutex debe ser desbloqueado con unlock() antes de que otro thread pueda bloquearlo exitosamente.
Se permite llamar a esta función varias veces sobre el mismo mutex desde el mismo hilo.
Véase también lock() y unlock().
template <typename Clock, typename Duration> bool QRecursiveMutex::try_lock_until(std::chrono::time_point<Clock, Duration> timePoint)
Intenta bloquear el mutex. Esta función devuelve true si se ha obtenido el bloqueo; en caso contrario, devuelve false. Si otro hilo ha bloqueado el mutex, esta función esperará al menos hasta timePoint para que el mutex esté disponible.
Nota: Pasar un timePoint que ya ha pasado equivale a llamar a try_lock(). Este comportamiento difiere de tryLock().
Si el bloqueo fue obtenido, el mutex debe ser desbloqueado con unlock() antes de que otro thread pueda bloquearlo exitosamente.
Se permite llamar a esta función varias veces sobre el mismo mutex desde el mismo hilo.
Véase también lock() y unlock().
[noexcept] void QRecursiveMutex::unlock()
Desbloquea el mutex. Intentar desbloquear un mutex en un hilo diferente al que lo bloqueó resulta en un error. Desbloquear un mutex que no está bloqueado produce un comportamiento indefinido.
Véase también 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.