Espacios de nombres
Variantes
Acciones

std::recursive_mutex::try_lock

De cppreference.com
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
(C++11)
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
(C++11)
(C++11)
Recuperación segura
(C++26)
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 
 
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.

Contenido

[editar] Parámetros

(Ninguno)

[editar] Valor de retorno

true si se adquirió el bloqueo con éxito, de lo contrario false.

[editar] Excepciones

No lanza nada.

[editar] 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

[editar] Véase también

Bloquea el mutex; se bloquea si el mutex no está disponible
(función miembro pública) [editar]
Desbloquea el mutex
(función miembro pública) [editar]
Documentación de C para mtx_trylock