std::recursive_mutex::try_lock
bool try_lock(); |
(desde C++11) | |
Intenta bloquear el mutex. Regresa inmediatamente. Si se tiene éxito en adquirir el bloqueo, devuelve true, de lo contrario devuelve false.
Se permite que esta función falle falsamente (spuriously) y devuelva false incluso si el mutex no se encuentra actualmente bloqueado por ningún otro hilo.
Un hilo puede llamar a try_lock en un mutex recursivo repetidamente. Llamadas con éxito a try_lock incrementan la cuenta de la propiedad: el mutex se liberará solamente después que el hilo haga un número de llamadas coincidentes a unlock.
El número máximo de niveles de propiedad no está especificado. Una llamada a try_lock devolverá false si se excede este número.
Una llamada previa a unlock() en el mismo mutex se sincroniza-con (como se define en std::memory_order) esta operación si devuelve true. Observa que una llamada previa a lock() no se sincroniza con esta operación si devuelve false.
Parámetros
(Ninguno)
Valor de retorno
true si se adquirió el bloqueo con éxito, de lo contrario false.
Excepciones
No lanza nada.
Ejemplo
#include <iostream>
#include <mutex>
int main()
{
std::recursive_mutex test;
if (test.try_lock()) {
std::cout << "bloqueo adquirido\n";
test.unlock();
} else {
std::cout << "bloqueo no adquirido\n";
}
test.lock();
// ahora, un mutex no recursivo devolvería false de try_lock
if (test.try_lock()) {
std::cout << "bloqueo adquirido\n";
test.unlock();
} else {
std::cout << "bloqueo no adquirido\n";
}
test.unlock();
}
Salida:
bloqueo adquirido
bloqueo adquirido
Véase también
| Bloquea el mutex; se bloquea si el mutex no está disponible (función miembro pública) | |
| Desbloquea el mutex (función miembro pública) | |
Documentación de C para mtx_trylock
| |