std::timed_mutex::try_lock_until
| template< class Clock, class Duration > bool try_lock_until( const std::chrono::time_point<Clock, Duration>& timeout_time ); |
(seit C++11) | |
Versucht, die Mutex zu sperren. Blockiert, bis die angegebene timeout_time erreicht ist (Timeout) oder die Sperre erworben wird (Besitz der Mutex), je nachdem, was zuerst eintritt. Bei erfolgreichem Erwerb der Sperre wird true zurückgegeben, andernfalls wird false zurückgegeben.
Wenn timeout_time bereits verstrichen ist, verhält sich diese Funktion wie try_lock().
Clock muss die Clock-Anforderungen erfüllen.Das Programm ist schlecht geformt, wenn std::chrono::is_clock_v<Clock> false ist.(seit C++20)
Der Standard empfiehlt, die an timeout_time gebundene Uhr zu verwenden, in welchem Fall Anpassungen der Uhr berücksichtigt werden können. Somit kann die Dauer des Blocks mehr oder weniger als timeout_time - Clock::now() zum Zeitpunkt des Aufrufs betragen, abhängig von der Richtung der Anpassung und ob sie von der Implementierung berücksichtigt wird. Die Funktion kann auch über timeout_time hinaus blockieren, aufgrund von Prozessplanung oder Ressourcenkonfliktverzögerungen.
Wie bei try_lock() darf diese Funktion fehlschlagen und false zurückgeben, auch wenn die Sperre zu irgendeinem Zeitpunkt vor timeout_time von keinem anderen Thread gesperrt war.
Eine vorherige unlock()-Operation auf derselben Sperre *synchronisiert-mit* (wie in std::memory_order definiert) dieser Operation, wenn sie true zurückgibt.
Wenn try_lock_until von einem Thread aufgerufen wird, der die Sperre bereits besitzt, ist das Verhalten undefiniert.
Inhalt |
[bearbeiten] Parameter
| timeout_time | - | maximaler Zeitpunkt, bis zu dem blockiert werden soll |
[bearbeiten] Rückgabewert
true, wenn die Sperre erfolgreich erworben wurde, andernfalls false.
[bearbeiten] Ausnahmen
Alle Ausnahmen, die von timeout_time ausgelöst werden (Uhren, Zeitpunkte und Zeitspannen, die von der Standardbibliothek bereitgestellt werden, werfen niemals Ausnahmen).
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2093 | C++11 | try_lock_until wirft nichts |
wirft Timeout-bezogene Ausnahmen |
[bearbeiten] Siehe auch
| sperrt den Mutex, blockiert, wenn der Mutex nicht verfügbar ist (public member function) | |
| versucht, den Mutex zu sperren, kehrt zurück, wenn der Mutex nicht verfügbar ist (public member function) | |
| versucht, den Mutex zu sperren, kehrt zurück, wenn der Mutex für die angegebene Zeitdauer nicht verfügbar war (public member function) | |
| entsperrt den Mutex (public member function) | |
| C-Dokumentation für mtx_timedlock
| |