Namensräume
Varianten
Aktionen

std::recursive_mutex::try_lock

Von cppreference.com
 
 
Bibliothek für nebenläufige Programmierung
Threads
(C++11)
(C++20)
this_thread Namespace
(C++11)
(C++11)
(C++11)
Kooperatives Beenden
Gegenseitiger Ausschluss
(C++11)
Allgemeines Sperrungsmanagement
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Bedingungsvariablen
(C++11)
Semaphoren
Latches und Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
Sichere Wiederherstellung
(C++26)
Hazard Pointer
Atomare Typen
(C++11)
(C++20)
Initialisierung von atomaren Typen
(C++11)(veraltet in C++20)
(C++11)(veraltet in C++20)
Speicherordnung
(C++11)(deprecated in C++26)
Freie Funktionen für atomare Operationen
Freie Funktionen für atomare Flags
 
 
bool try_lock() noexcept;
(seit C++11)

Versucht, den Mutex zu sperren. Gibt sofort zurück. Bei erfolgreichem Erwerb der Sperre wird true zurückgegeben, andernfalls wird false zurückgegeben.

Diese Funktion kann fehlschlagen (spurious failure) und false zurückgeben, auch wenn der Mutex derzeit von keinem anderen Thread gesperrt ist.

Ein Thread kann try_lock auf einem rekursiven Mutex wiederholt aufrufen. Erfolgreiche Aufrufe von try_lock erhöhen den Besitzzähler: Der Mutex wird erst freigegeben, nachdem der Thread eine entsprechende Anzahl von Aufrufen von unlock getätigt hat.

Die maximale Anzahl von Besitzebenen ist nicht spezifiziert. Ein Aufruf von try_lock gibt false zurück, wenn diese Anzahl überschritten wird.

Ein vorheriger unlock()-Vorgang auf demselben Mutex synchronisiert sich mit (gemäß Definition in std::memory_order) diesem Vorgang, wenn er true zurückgibt. Beachten Sie, dass ein vorheriger lock()-Aufruf nicht mit diesem Vorgang synchronisiert, wenn er false zurückgibt.

Inhalt

[bearbeiten] Parameter

(keine)

[bearbeiten] Rückgabewert

true, wenn die Sperre erfolgreich erworben wurde, andernfalls false.

[bearbeiten] Ausnahmen

Wirft nichts.

[bearbeiten] Beispiel

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

Ausgabe

lock acquired
lock acquired

[bearbeiten] Siehe auch

sperrt den Mutex, blockiert, wenn der Mutex nicht verfügbar ist
(public member function) [edit]
entsperrt den Mutex
(public member function) [edit]
C-Dokumentation für mtx_trylock