Namensräume
Varianten
Aktionen

C++ Benannte Anforderungen: SharedTimedMutex (seit C++14)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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 duration angegebenen Dauer zu erlangen. Wenn duration kleiner oder gleich duration.zero() ist, wird versucht, die Eigentümerschaft ohne Wartezeit zu erlangen (als ob durch try_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben ist oder bis die von duration angegebene Zeit verstrichen ist. Sie gibt innerhalb von duration nur dann zurück, wenn sie erfolgreich war, darf aber auch dann fehlschlagen, die Sperre zu erwerben, wenn sie zu irgendeinem Zeitpunkt während duration nicht 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 vorherige unlock() 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_point zu erlangen. Wenn time_point bereits vergangen ist, wird versucht, die Eigentümerschaft ohne Sperren zu erlangen (als ob durch try_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben ist oder bis die von time_point angegebene Zeit verstrichen ist. Sie gibt vor time_point nur dann zurück, wenn sie erfolgreich war, darf aber auch dann fehlschlagen, die Sperre zu erwerben, wenn sie zu irgendeinem Zeitpunkt vor time_point nicht 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 vorherige unlock() 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.

bietet gemeinsame Gegenseitiger-Ausschluss-Funktionen und implementiert ein Sperren mit Timeout
(Klasse) [bearbeiten]

[bearbeiten] Siehe auch