Namespaces
Variants

std::recursive_mutex:: try_lock

From cppreference.net

Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
bool try_lock ( ) noexcept ;
(desde C++11)

Intenta bloquear el mutex. Retorna inmediatamente. Si la adquisición del bloqueo es exitosa retorna true , de lo contrario retorna false .

Esta función puede fallar esporádicamente y devolver false incluso si el mutex no está actualmente bloqueado por ningún otro hilo.

Un hilo puede llamar try_lock en un mutex recursivo repetidamente. Las llamadas exitosas a try_lock incrementan el contador de propiedad: el mutex solo se liberará después de que el hilo realice un número equivalente de llamadas 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.

La operación previa unlock() en el mismo mutex sincroniza-con (como se define en std::memory_order ) esta operación si retorna true . Nótese que la operación previa lock() no se sincroniza con esta operación si retorna false .

Contenidos

Parámetros

(ninguno)

Valor de retorno

true si el bloqueo se adquirió exitosamente, 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 << "lock acquired\n";
        test.unlock();
    }
    else
        std::cout << "lock not acquired\n";
    test.lock();
    // non-recursive mutex would return false from try_lock now
    if (test.try_lock())
    {
        std::cout << "lock acquired\n";
        test.unlock(); 
    }
    else
        std::cout << "lock not acquired\n";
    test.unlock();
}

Salida:

lock acquired
lock acquired

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