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 ;
(depuis C++11)

Tente de verrouiller le mutex. Retourne immédiatement. En cas de réussite du verrouillage, retourne true , sinon retourne false .

Cette fonction peut échouer sporadiquement et renvoyer false même si le mutex n'est actuellement verrouillé par aucun autre thread.

Un thread peut appeler try_lock de manière répétée sur un mutex récursif. Les appels réussis à try_lock incrémentent le compteur de propriété : le mutex ne sera libéré qu'après que le thread ait effectué un nombre correspondant d'appels à unlock .

Le nombre maximum de niveaux de propriété n'est pas spécifié. Un appel à try_lock retournera false si ce nombre est dépassé.

L'opération de unlock() antérieure sur le même mutex se synchronise avec (tel que défini dans std::memory_order ) cette opération si elle retourne true . Notez que l'opération de lock() antérieure ne se synchronise pas avec cette opération si elle retourne false .

Table des matières

Paramètres

(aucun)

Valeur de retour

true si le verrou a été acquis avec succès, sinon false .

Exceptions

Ne lance rien.

Exemple

#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();
}

Sortie :

lock acquired
lock acquired

Voir aussi

verrouille le mutex, bloque si le mutex n'est pas disponible
(fonction membre publique)
déverrouille le mutex
(fonction membre publique)
Documentation C pour mtx_trylock