C++ benannte Anforderungen: TimedMutex (seit C++11)
Von cppreference.com
< cpp | benannte req
Die TimedMutex-Anforderungen erweitern die TimedLockable-Anforderungen um die Inter-Thread-Synchronisation.
Inhalt |
[bearbeiten] Anforderungen
Zusätzlich gelten für ein Objekt m vom Typ TimedMutex
- Der Ausdruck m.try_lock_for(dauer) hat folgende Eigenschaften
- Verhält sich als atomare Operation.
- Versucht, den exklusiven Besitz des Mutex innerhalb der von
dauerangegebenen Dauer zu erlangen. Wenndauerkleiner oder gleichdauer.zero()ist, wird versucht, den Besitz ohne Blockierung zu erlangen (als ob mittry_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder bis die durchdauerangegebene Zeit verstrichen ist. Sie kehrt innerhalb vondauernur zurück, wenn sie erfolgreich ist, es ist ihr jedoch gestattet, den Mutex nicht zu erwerben, selbst wenn er zu irgendeinem Zeitpunkt währenddauernicht im Besitz eines anderen Threads war. In jedem Fall gibt sie true zurück, wenn der Mutex erworben wurde, und false andernfalls. - Wenn
try_lock_for(dauer)erfolgreich ist, synchronisieren-sich frühereunlock()-Operationen auf demselben Objekt mit dieser Operation (entspricht release-acquire std::memory_order). - Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex bereits besitzt (außer wenn m ein std::recursive_timed_mutex ist).
- Während der Ausführung können Ausnahmen von Uhr, Zeitpunkt oder Dauer ausgelöst werden (von der Standardbibliothek bereitgestellte Uhren, Zeitpunkte und Dauern lösen niemals Ausnahmen aus).
- Der Ausdruck m.try_lock_until(zeitpunkt) hat folgende Eigenschaften
- Verhält sich als atomare Operation.
- Versucht, den exklusiven Besitz des Mutex innerhalb der verbleibenden Zeit bis
zeitpunktzu erlangen. Wennzeitpunktbereits vergangen ist, wird versucht, den Besitz ohne Blockierung zu erlangen (als ob mittry_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder bis die durchzeitpunktangegebene Zeit verstrichen ist. Sie kehrt vorzeitpunktnur zurück, wenn sie erfolgreich ist, es ist ihr jedoch gestattet, den Mutex nicht zu erwerben, selbst wenn er zu irgendeinem Zeitpunkt vorzeitpunktnicht im Besitz eines anderen Threads war. In jedem Fall gibt sie true zurück, wenn der Mutex erworben wurde, und false andernfalls. - Wenn
try_lock_until(zeitpunkt)erfolgreich ist, synchronisieren-sich frühereunlock()-Operationen auf demselben Objekt mit dieser Operation (entspricht release-acquire std::memory_order). - Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex bereits besitzt (außer wenn m ein std::recursive_timed_mutex ist).
- Während der Ausführung können Ausnahmen von Uhr, Zeitpunkt oder Dauer ausgelöst werden (von der Standardbibliothek bereitgestellte Uhren, Zeitpunkte und Dauern lösen niemals Ausnahmen aus).
[bearbeiten] Standardbibliothek
Die folgenden Standardbibliothekstypen erfüllen die Anforderungen von TimedMutex
| (C++11) |
bietet Gegenseitiger-Ausschluss-Funktionen, die rekursiv gesperrt werden können von demselben Thread und implementiert ein Sperren mit Timeout (Klasse) |
| (C++14) |
bietet gemeinsame Gegenseitiger-Ausschluss-Funktionen und implementiert ein Sperren mit Timeout (Klasse) |
| (C++11) |
bietet Gegenseitiger-Ausschluss-Funktionen, die ein Sperren mit Timeout implementieren (Klasse) |
[bearbeiten] Fehlerberichte
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 | timeoutbezogene Ausnahmen fehlten in der Spezifikation | erwähnt |