Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: TimedMutex (seit C++11)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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 dauer angegebenen Dauer zu erlangen. Wenn dauer kleiner oder gleich dauer.zero() ist, wird versucht, den Besitz ohne Blockierung zu erlangen (als ob mit try_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder bis die durch dauer angegebene Zeit verstrichen ist. Sie kehrt innerhalb von dauer nur zurück, wenn sie erfolgreich ist, es ist ihr jedoch gestattet, den Mutex nicht zu erwerben, selbst wenn er zu irgendeinem Zeitpunkt während dauer nicht 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ühere 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 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 zeitpunkt zu erlangen. Wenn zeitpunkt bereits vergangen ist, wird versucht, den Besitz ohne Blockierung zu erlangen (als ob mit try_lock()). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder bis die durch zeitpunkt angegebene Zeit verstrichen ist. Sie kehrt vor zeitpunkt nur zurück, wenn sie erfolgreich ist, es ist ihr jedoch gestattet, den Mutex nicht zu erwerben, selbst wenn er zu irgendeinem Zeitpunkt vor zeitpunkt nicht 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ühere 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 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

bietet Gegenseitiger-Ausschluss-Funktionen, die rekursiv gesperrt werden können
von demselben Thread und implementiert ein Sperren mit Timeout
(Klasse) [bearbeiten]
bietet gemeinsame Gegenseitiger-Ausschluss-Funktionen und implementiert ein Sperren mit Timeout
(Klasse) [bearbeiten]
bietet Gegenseitiger-Ausschluss-Funktionen, die ein Sperren mit Timeout implementieren
(Klasse) [bearbeiten]

[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

[bearbeiten] Siehe auch