Namespaces
Variants

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

From cppreference.net
C++ named requirements

Die Mutex -Anforderungen erweitern die Lockable -Anforderungen um die Synchronisation zwischen Threads.

Inhaltsverzeichnis

Anforderungen

Für ein Objekt m vom Typ Mutex :

  • Der Ausdruck m. lock ( ) besitzt die folgenden Eigenschaften
  • Verhält sich wie ein atomarer Vorgang.
  • Blockiert den aufrufenden Thread, bis exklusiver Besitz des Mutex erlangt werden kann.
  • Vorherige m. unlock ( ) -Operationen auf demselben Mutex synchronisieren mit dieser Sperroperation (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_mutex oder std::recursive_timed_mutex ist).
  • Ausnahmen vom Typ std::system_error können bei Fehlern geworfen werden, mit folgenden Fehlercodes:
  • Der Ausdruck m. try_lock ( ) besitzt die folgenden Eigenschaften
  • Verhält sich wie ein atomarer Vorgang.
  • Versucht, exklusiven Besitz des Mutex für den aufrufenden Thread zu erlangen, ohne zu blockieren. Wenn der Besitz nicht erlangt wird, kehrt die Funktion sofort zurück. Der Funktion ist es erlaubt, sporadisch zu scheitern und zurückzukehren, selbst wenn der Mutex derzeit nicht von einem anderen Thread besessen wird.
  • Wenn try_lock() erfolgreich ist, synchronisieren vorherige unlock() -Operationen auf demselben Objekt mit dieser Operation (entspricht Release-Acquire std::memory_order ). lock() synchronisiert nicht mit einem fehlgeschlagenen try_lock() .
  • Wirft keine Ausnahmen.
  • Der Ausdruck m. unlock ( ) besitzt die folgenden Eigenschaften
  • Verhält sich wie ein atomarer Vorgang.
  • Gibt den Besitz des Mutex durch den aufrufenden Thread frei und synchronizes-with den nachfolgenden erfolgreichen Sperrvorgängen am selben Objekt.
  • Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex nicht besitzt.
  • Wirft keine Ausnahmen.
  • Alle Sperr- und Freigabeoperationen an einem einzelnen Mutex erfolgen in einer einzigen Gesamtordnung, die als Änderungsreihenfolge einer atomaren Variable betrachtet werden kann: Die Reihenfolge ist spezifisch für diesen einzelnen Mutex.

Standardbibliothek

Die folgenden Standardbibliothekstypen erfüllen Mutex -Anforderungen:

(C++11)
bietet grundlegende gegenseitige Ausschlussfunktionalität
(Klasse)
bietet gegenseitige Ausschlussfunktionalität, die rekursiv durch denselben Thread gesperrt werden kann
(Klasse)
bietet gegenseitige Ausschlussfunktionalität, die rekursiv
durch denselben Thread gesperrt werden kann und implementiert Timeout-Sperrung
(Klasse)
bietet gemeinsame gegenseitige Ausschlussfunktionalität
(Klasse)
bietet gemeinsame gegenseitige Ausschlussfunktionalität und implementiert Timeout-Sperrung
(Klasse)
bietet gegenseitige Ausschlussfunktionalität, die Timeout-Sperrung 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 2309 C++11 lock könnte std::system_error
mit Fehlercode std::errc::device_or_resource_busy werfen
nicht erlaubt

Siehe auch