C++ Benannte Anforderungen: SharedTimedMutex (seit C++14)
Von cppreference.com
< cpp | benannte req
Die SharedTimedMutex Anforderungen erweitern die TimedMutex Anforderungen um die gemeinsame Eigentümerschaft im Sperrmodus.
[bearbeiten] Anforderungen
Zusätzlich unterstützt ein Objekt m vom Typ SharedTimedMutex zeitgesteuerte gemeinsame Operationen.
- Der Ausdruck m.try_lock_shared_for(duration) hat die folgenden Eigenschaften.
- Verhält sich als atomare Operation.
- Versucht, die gemeinsame Eigentümerschaft des Mutex innerhalb der von
durationangegebenen Dauer zu erlangen. Wenndurationkleiner oder gleichduration.zero()ist, wird versucht, die Eigentümerschaft ohne Wartezeit zu erlangen (als ob durchtry_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben ist oder bis die vondurationangegebene Zeit verstrichen ist. Sie gibt innerhalb vondurationnur dann zurück, wenn sie erfolgreich war, darf aber auch dann fehlschlagen, die Sperre zu erwerben, wenn sie zu irgendeinem 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 (entspricht release-acquire std::memory_order). - Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex bereits in irgendeinem Modus besitzt.
- Eine Ausnahme kann von der Uhr, dem Zeitpunkt oder der Dauer während der Ausführung ausgelöst werden (Uhren, Zeitpunkte und Dauern, die von der Standardbibliothek bereitgestellt werden, 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 die folgenden Eigenschaften.
- Verhält sich als atomare Operation.
- Versucht, die gemeinsame Eigentümerschaft des Mutex innerhalb der verbleibenden Zeit bis
time_pointzu erlangen. Wenntime_pointbereits vergangen ist, wird versucht, die Eigentümerschaft ohne Sperren zu erlangen (als ob durchtry_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben ist oder bis die vontime_pointangegebene Zeit verstrichen ist. Sie gibt vortime_pointnur dann zurück, wenn sie erfolgreich war, darf aber auch dann fehlschlagen, die Sperre zu erwerben, wenn sie zu irgendeinem Zeitpunkt vortime_pointnicht 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_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 den Mutex bereits in irgendeinem Modus besitzt.
- Eine Ausnahme kann von der Uhr, dem Zeitpunkt oder der Dauer während der Ausführung ausgelöst werden (Uhren, Zeitpunkte und Dauern, die von der Standardbibliothek bereitgestellt werden, werfen niemals Ausnahmen).
- Wenn eine Ausnahme ausgelöst wird, wird die gemeinsame Sperre nicht erworben.
[bearbeiten] Standardbibliothek
Die folgenden Standardbibliotheken-Typen erfüllen die Anforderungen an SharedTimedMutex.
| (C++14) |
bietet gemeinsame Gegenseitiger-Ausschluss-Funktionen und implementiert ein Sperren mit Timeout (Klasse) |