C++ named requirements: SharedTimedMutex (since C++14)
From cppreference.net
C++
C++ named requirements
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die SharedTimedMutex -Anforderungen erweitern die TimedMutex -Anforderungen um den gemeinsamen Sperrmodus (shared lock ownership mode).
Anforderungen
Zusätzlich unterstützt ein Objekt
m
vom Typ
SharedTimedMutex
zeitgesteuerte Shared-Operationen:
- Der Ausdruck m. try_lock_shared_for ( duration ) besitzt die folgenden Eigenschaften
-
- Verhält sich wie eine atomare Operation.
-
Versucht, den gemeinsamen Besitz des Mutex innerhalb der durch
durationangegebenen Dauer zu erlangen. Wenndurationkleiner oder gleichduration.zero()ist, wird versucht, den Besitz ohne Wartezeit zu erlangen (wie beitry_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder die durchdurationangegebene Zeit verstrichen ist. Sie kehrt innerhalb vondurationnur zurück, wenn sie erfolgreich ist, aber es ist möglich, dass der Mutex nicht erworben wird, 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_shared_for(duration)erfolgreich ist, synchronisieren vorherigeunlock()-Operationen auf demselben Objekt mit dieser Operation (äquivalent zu Release-Acquire std::memory_order ). - Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex bereits in einem Modus besitzt.
- Während der Ausführung können Ausnahmen von Uhr, Zeitpunkt oder Dauer ausgelöst werden (von der Standardbibliothek bereitgestellte Uhren, Zeitpunkte und Dauern werfen niemals Ausnahmen).
- Wenn eine Ausnahme ausgelöst wird, wird die gemeinsame Sperre nicht erworben.
- Der Ausdruck m. try_lock_shared_until ( time_point ) hat folgende Eigenschaften
-
- Verhält sich wie ein atomarer Vorgang.
-
Versucht, innerhalb der verbleibenden Zeit bis zum
time_pointgemeinsamen Besitz des Mutex zu erlangen. Falls dertime_pointbereits überschritten wurde, wird versucht, den Besitz ohne Sperren zu erlangen (wie durchtry_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben wurde oder der durchtime_pointspezifizierte Zeitpunkt verstrichen ist. Sie kehrt nur vor demtime_pointzurück, wenn sie erfolgreich war, aber es ist ihr erlaubt, den Mutex nicht zu erwerben, selbst wenn er zu einem Zeitpunkt vor demtime_pointnicht 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_shared_until(time_point)erfolgreich ist, synchronisieren vorherigeunlock()-Operationen auf demselben Objekt mit dieser Operation (äquivalent zu Release-Acquire- std::memory_order ). - Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex bereits in irgendeinem Modus besitzt.
- Während der Ausführung können Ausnahmen durch Uhr, Zeitpunkt oder Dauer ausgelöst werden (von der Standardbibliothek bereitgestellte Uhren, Zeitpunkte und Dauern werfen niemals Ausnahmen).
- Wenn eine Ausnahme ausgelöst wird, wird die gemeinsame Sperre nicht erworben.
Standardbibliothek
Die folgenden Standardbibliothekstypen erfüllen die SharedTimedMutex -Anforderungen:
|
(C++14)
|
bietet gemeinsame gegenseitige Ausschlussfunktionalität und implementiert Sperren mit Timeout
(Klasse) |