Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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

Inhalt

[bearbeiten] Anforderungen

Für ein Objekt m vom Typ Mutex

  • Der Ausdruck m.lock() hat die folgenden Eigenschaften:
  • Verhält sich als atomare Operation.
  • Blockiert den aufrufenden Thread, bis exklusiver Besitz des Mutex erlangt werden kann.
  • Vorherige m.unlock()-Operationen auf demselben Mutex synchronisieren mit dieser Lock-Operation (entspricht Release-Acquire std::memory_order).
  • Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex bereits besitzt (es sei denn, m ist std::recursive_mutex oder std::recursive_timed_mutex).
  • Ausnahmen vom Typ std::system_error können bei Fehlern ausgelöst werden, mit den folgenden Fehlercodes:
  • Der Ausdruck m.try_lock() hat die folgenden Eigenschaften:
  • Verhält sich als atomare Operation.
  • Versucht, den exklusiven Besitz des Mutex für den aufrufenden Thread zu erlangen, ohne zu blockieren. Wenn der Besitz nicht erlangt wird, wird sofort zurückgekehrt. Die Funktion darf fehlerhaft fehlschlagen und auch dann zurückkehren, 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().
  • Löst keine Ausnahmen aus.
  • Der Ausdruck m.unlock() hat die folgenden Eigenschaften:
  • Verhält sich als atomare Operation.
  • Gibt den Besitz des Mutex durch den aufrufenden Thread frei und synchronisiert mit nachfolgenden erfolgreichen Lock-Operationen auf demselben Objekt.
  • Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex nicht besitzt.
  • Löst keine Ausnahmen aus.
  • Alle Lock- und Unlock-Operationen auf einem einzelnen Mutex erfolgen in einer einzigen totalen Reihenfolge, die als Modifikationsreihenfolge einer atomaren Variable betrachtet werden kann: Die Reihenfolge ist spezifisch für diesen einzelnen Mutex.

[bearbeiten] Standardbibliothek

Die folgenden Standardbibliothekstypen erfüllen die Mutex-Anforderungen.

(C++11)
bietet grundlegende Gegenseitiger-Ausschluss-Funktionen
(Klasse) [bearbeiten]
bietet Gegenseitiger-Ausschluss-Funktionen, die von demselben Thread rekursiv gesperrt werden können
(Klasse) [bearbeiten]
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
(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 2309 C++11 lock kann std::system_error auslösen
mit Fehlercode std::errc::device_or_resource_busy
nicht erlaubt

[bearbeiten] Siehe auch