Namespaces
Variants

C++ named requirements: TimedMutex (since C++11)

From cppreference.net
C++ named requirements

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 duration angegebenen Dauer zu erlangen. Wenn duration kleiner oder gleich duration.zero() ist, wird versucht, den Besitz ohne Blockierung zu erlangen (wie durch try_lock() ). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder die durch duration angegebene Zeit verstrichen ist. Sie gibt innerhalb von duration nur dann zurück, wenn sie erfolgreich ist, aber es ist ihr erlaubt, den Mutex nicht zu erwerben, selbst wenn er zu einem 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_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 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_point zu erlangen. Falls time_point bereits überschritten wurde, wird versucht, den Besitz ohne Blockierung zu erlangen (wie durch try_lock() ). Andernfalls blockiert diese Funktion, bis der Mutex erworben wird oder bis der durch time_point spezifizierte Zeitpunkt verstrichen ist. Sie kehrt vor time_point nur zurück, wenn sie erfolgreich ist, es ist ihr jedoch erlaubt, den Mutex nicht zu erwerben, selbst wenn zu einem Zeitpunkt vor time_point dieser 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 vorherige unlock() -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:

Bietet eine gegenseitige Ausschlusseinrichtung, die rekursiv
durch denselben Thread gesperrt werden kann und implementiert das Sperren mit Timeout
(Klasse)
Bietet eine gemeinsame gegenseitige Ausschlusseinrichtung und implementiert das Sperren mit Timeout
(Klasse)
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

Siehe auch