C++ named requirements: TimedMutex (since C++11)
From cppreference.net
Die TimedMutex -Anforderungen erweitern die TimedLockable -Anforderungen um die Synchronisation zwischen Threads.
Inhaltsverzeichnis |
Anforderungen
Zusätzlich, für ein Objekt
m
vom Typ
TimedMutex
:
- Der Ausdruck m. try_lock_for ( duration ) besitzt die folgenden Eigenschaften
-
- Verhält sich wie ein atomarer Vorgang.
-
Versucht, den exklusiven Besitz des Mutex innerhalb der durch
durationangegebenen Dauer zu erlangen. Wenndurationkleiner oder gleichduration.zero()ist, wird versucht, den Besitz ohne Blockierung zu erlangen (wie durchtry_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder die durchdurationangegebene Zeit verstrichen ist. Sie gibt innerhalb vondurationnur dann zurück, wenn sie erfolgreich ist, aber es ist ihr erlaubt, den Mutex nicht zu erwerben, selbst wenn er zu einem Zeitpunkt währenddurationnicht von einem anderen Thread gehalten wurde. In jedem Fall gibt sie true zurück, wenn der Mutex erworben wurde, und false andernfalls. -
Wenn
try_lock_for(duration)erfolgreich ist, synchronisieren vorherigeunlock()-Operationen auf demselben Objekt mit dieser Operation (entspricht Release-Acquire std::memory_order ). - Das Verhalten ist undefiniert, wenn der aufrufende Thread bereits den Mutex besitzt (außer wenn m ein std::recursive_timed_mutex ist).
- Während der Ausführung kann eine Ausnahme durch Uhr, Zeitpunkt oder Dauer ausgelöst werden (von der Standardbibliothek bereitgestellte Uhren, Zeitpunkte und Dauern werfen niemals Ausnahmen).
- Der Ausdruck m. try_lock_until ( time_point ) besitzt die folgenden Eigenschaften
-
- Verhält sich wie ein atomarer Vorgang.
-
Versucht, exklusiven Besitz des Mutex innerhalb der verbleibenden Zeit bis
time_pointzu erlangen. Fallstime_pointbereits überschritten wurde, wird versucht, den Besitz ohne Blockierung zu erlangen (wie durchtry_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder bis der durchtime_pointspezifizierte Zeitpunkt verstrichen ist. Sie kehrt vortime_pointnur zurück, wenn sie erfolgreich ist, es ist ihr jedoch erlaubt, den Mutex nicht zu erwerben, selbst wenn zu einem Zeitpunkt vortime_pointdieser nicht durch einen anderen Thread besessen war. In jedem Fall gibt sie true zurück, wenn der Mutex erworben wurde, und false andernfalls. -
Wenn
try_lock_until(time_point)erfolgreich ist, synchronisieren vorherigeunlock()-Operationen auf demselben Objekt mit dieser Operation (entspricht Release-Acquire std::memory_order ). - Das Verhalten ist undefiniert, wenn der aufrufende Thread bereits den Mutex besitzt (außer wenn m ein std::recursive_timed_mutex ist).
- Während der Ausführung können Ausnahmen durch Clock, Time Point oder Duration geworfen werden (von der Standardbibliothek bereitgestellte Clocks, Time Points und Durations werfen niemals).
Standardbibliothek
Die folgenden Standardbibliothekstypen erfüllen TimedMutex Anforderungen:
|
(C++11)
|
Bietet eine gegenseitige Ausschlusseinrichtung, die rekursiv
durch denselben Thread gesperrt werden kann und implementiert das Sperren mit Timeout (Klasse) |
|
(C++14)
|
Bietet eine gemeinsame gegenseitige Ausschlusseinrichtung und implementiert das Sperren mit Timeout
(Klasse) |
|
(C++11)
|
Bietet eine gegenseitige Ausschlusseinrichtung, die das Sperren mit Timeout implementiert
(Klasse) |
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 2093 | C++11 | Timeout-bezogene Ausnahmen fehlten in der Spezifikation | erwähnt |