Namespaces
Variants

C++ named requirements: SharedMutex (since C++17)

From cppreference.net
C++ named requirements

Die SharedMutex -Anforderungen erweitern die Mutex -Anforderungen um den gemeinsamen Sperrbesitzmodus.

Anforderungen

Zusätzlich unterstützt ein Objekt m vom Typ SharedMutex einen weiteren Besitzmodus: Shared. Mehrere Threads (oder allgemeiner Ausführungsagenten) können diesen Mutex gleichzeitig im Shared-Modus besitzen, jedoch darf kein Thread Shared-Besitz erlangen, wenn ein Thread ihn im exklusiven Modus besitzt, und kein Thread darf exklusiven Besitz erlangen, wenn ein Thread ihn im Shared-Modus besitzt. Wenn mehr als eine implementierungsdefinierte Anzahl von Threads (nicht weniger als 10000) eine Shared-Sperre halten, blockiert ein weiterer Versuch, den Mutex im Shared-Modus zu erwerben, bis die Anzahl der Shared-Besitzer unter diesen Schwellenwert fällt.

  • Der Ausdruck m. lock_shared ( ) besitzt folgende Eigenschaften:
  • Verhält sich wie eine atomare Operation.
  • Blockiert den aufrufenden Thread, bis der gemeinsame Besitz des Mutex erlangt werden kann.
  • Vorherige m. unlock ( ) Operationen auf demselben Mutex synchronisieren mit dieser Sperroperation (äquivalent zu Release-Acquire std::memory_order ).
  • Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex bereits in einem Modus besitzt.
  • Wenn eine Exception ausgelöst wird, wird die Shared Lock nicht erworben.
  • Der Ausdruck m. try_lock_shared ( ) besitzt folgende Eigenschaften:
  • Verhält sich wie ein atomarer Vorgang.
  • Versucht, gemeinsamen Besitz des Mutex für den aufrufenden Thread zu erlangen, ohne zu blockieren. Wenn der Besitz nicht erlangt werden kann, wird sofort zurückgekehrt. Der Funktion ist es erlaubt, fälschlicherweise zu scheitern und zurückzukehren, selbst wenn der Mutex derzeit von keinem Thread in einem Modus besessen wird.
  • Wenn try_lock_shared() erfolgreich ist, synchronisieren vorherige unlock() Operationen auf demselben Objekt mit dieser Operation (äquivalent zu Release-Acquire std::memory_order ).
  • Das Verhalten ist undefiniert, wenn der aufrufende Thread den Mutex bereits in einem Modus besitzt.
  • Der Ausdruck m. unlock_shared ( ) 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.
  • Alle Sperr- und Freigabeoperationen an einem einzelnen Mutex erfolgen in einer einzigen Gesamtordnung.

Standardbibliothek

Die folgenden Standardbibliothekstypen erfüllen SharedMutex Anforderungen:

bietet Einrichtung für gemeinsamen gegenseitigen Ausschluss
(Klasse)
bietet Einrichtung für gemeinsamen gegenseitigen Ausschluss und implementiert Sperrung mit Timeout
(Klasse)

Siehe auch