<mutex>

Schließen Sie den Standardheader ein <mutex> , um die Klassen mutex, recursive_mutex, , timed_mutexund recursive_timed_mutex; die Vorlagen lock_guard und unique_lock; sowie unterstützende Typen und Funktionen zu definieren, die Codebereiche für gegenseitigen Ausschluss definieren.

Warnung

Ab Visual Studio 2015 basieren die C++-Standardbibliothekssynchronisierungstypen auf Windows-Synchronisierungsgrundtypen und verwenden concRT nicht mehr (außer wenn die Zielplattform Windows XP ist). Die in <mutex> definierten Typen sollten nicht mit ConcRT-Typen oder -Funktionen verwendet werden.

Anforderungen

Header: <mutex>

Namespace:std

Hinweise

Hinweis

In Code, der mithilfe von /clr"Kompiliert" kompiliert wird, wird dieser Header blockiert.

Die Klassen mutex und recursive_mutex sind mutex-Typen. Ein Mutex-Typ verfügt über einen Standardkonstruktor und einen Destruktor, der keine Ausnahmen auslöst. Diese Objekte weisen Methoden auf, die gegenseitigen Ausschluss bereitstellen, wenn mehrere Threads versuchen, das gleiche Objekt zu sperren. Ein mutex-Typ enthält genauer gesagt die lock- try_lock- und unlock-Methoden:

  • Die lock-Methode blockiert den aufrufenden Thread, bis der Thread in den Besitz von mutex gelangt. Der Rückgabewert wird ignoriert.

  • Die try_lock-Methode versucht, ohne Blockierung in den Besitz von mutex zu gelangen. Der Rückgabetyp ist in bool konvertierbar und weist den Wert true auf, wenn die Methode den Besitz erlangt, andernfalls false.

  • Die unlock-Methode gibt den Besitz von mutex von dem aufrufenden Thread frei.

Sie können mutex-Typen als Typargumente verwenden, um die Vorlagen lock_guard und unique_lock zu instanziieren. Sie können Objekte dieser Typen als Lock Argument für die Wait-Memberfunktionen in der Vorlage condition_variable_anyverwenden.

Ein timed_mutex-Typ erfüllt die Anforderungen eines mutex-Typs. Darüber hinaus weist er die try_lock_for- und try_lock_until-Methoden auf, die mit einem Argument aufgerufen werden und einen Typ zurückgeben müssen, der in bool konvertiert werden kann. Ein zeitgesteuerter mutex-Typ kann diese Funktionen mit zusätzlichen Argumenten definieren, vorausgesetzt, dass diese zusätzlichen Argumente über Standardwerte verfügen.

  • Die try_lock_for Methode muss mit einem Argument aufgerufen werden können, Rel_timedessen Typ eine Instanziierung von chrono::duration. Die Methode versucht, in den Besitz von mutex zu gelangen, gibt jedoch unabhängig vom Erfolg innerhalb der in Rel_time festgelegten Zeit einen Wert zurück. Der Rückgabewert wird in true konvertiert, wenn die Methode in den Besitz von mutex gelangt; andernfalls wird der Rückgabewert in false konvertiert.

  • Die try_lock_until Methode muss mit einem Argument aufgerufen werden können, Abs_timedessen Typ eine Instanziierung von chrono::time_point. Die Methode versucht, in den Besitz von mutex zu gelangen, gibt jedoch unabhängig vom Erfolg nicht später als innerhalb der in Abs_time festgelegten Zeit einen Wert zurück. Der Rückgabewert wird in true konvertiert, wenn die Methode in den Besitz von mutex gelangt; andernfalls wird der Rückgabewert in false konvertiert.

Ein mutex-Typ wird auch als sperrbarer Typ bezeichnet. Wenn sie die Memberfunktion try_locknicht bereitstellt, handelt es sich um einen einfachen sperrbaren Typ. Ein timed mutex type is known as a timed lockable type. Ein zeitlich festgelegter sperrbarer Typ blockiert für einen bestimmten Zeitraum oder bis eine Sperre auf dem Mutex abgerufen wird.

Member

Klassen

name Beschreibung
lock_guard Klasse Stellt eine Vorlage dar, die instanziiert werden kann, um ein Objekt zu erstellen, dessen Destruktor einen Mutex entsperrt.
mutex Klasse (C++-Standardbibliothek) Stellt einen mutex-Typ dar. Verwenden Sie Objekte dieses Typs dazu, den gegenseitigen Ausschluss innerhalb eines Programms zu erzwingen.
recursive_mutex Klasse Stellt einen mutex-Typ dar. Im Gegensatz zur mutex Klasse ist das Verhalten des Aufrufens von Sperrmethoden für bereits gesperrte Objekte klar definiert.
recursive_timed_mutex Klasse Verwenden Sie Objekte dieses Typs dazu, den gegenseitigen Ausschluss mit zeitbegrenzter Blockierung innerhalb eines Programms zu erzwingen. Im Gegensatz dazu timed_mutexist die Auswirkung des Aufrufens von Sperrmethoden für recursive_timed_mutex Objekte gut definiert.
scoped_lock Klasse
timed_mutex Klasse Verwenden Sie Objekte dieses Typs dazu, den gegenseitigen Ausschluss mit zeitbegrenzter Blockierung innerhalb eines Programms zu erzwingen.
unique_lock Klasse Stellt eine Vorlage dar, die instanziiert werden kann, um Objekte zu erstellen, die die Sperrung und Entsperrung eines Mutex verwalten.

Functions

Name Beschreibung
call_once Stellt einen Mechanismus zum Aufrufen eines angegebenen aufrufbaren Objekts genau einmal während der Ausführung bereit.
lock Versucht, alle Argumente ohne Deadlock zu sperren.
swap Versucht, die internen Zustände von zwei mutex Objekten auszutauschen, x und y.
try_lock Versucht, das sperrbare Objekt zu sperren. Gibt sofort zurück.

Strukturen

Name Beschreibung
adopt_lock_t Struktur Stellt einen Typ dar, der zum Definieren eines adopt_lock-Elements verwendet wird.
defer_lock_t Struktur Stellt einen Typ dar, der ein defer_lock-Objekt definiert, das zum Auswählen eines überladenen Konstruktors von unique_lock verwendet wird.
once_flag Struktur Stellt eine struct dar, die mit der call_once-Vorlagenfunktion verwendet wird, damit der Initialisierungscode auch bei mehreren Ausführungsthreads nur einmal aufgerufen wird.
try_to_lock_t Struktur Stellt eine struct dar, die ein try_to_lock-Objekt definiert und zum Auswählen eines überladenen Konstruktors von unique_lock verwendet wird.

Variablen

Name Beschreibung
adopt_lock Stellt ein Objekt dar, das an Konstruktoren lock_guard übergeben werden kann, und unique_lock gibt an, dass das mutex Objekt, das auch an den Konstruktor übergeben wird, gesperrt ist.
defer_lock Stellt ein Objekt dar, das an den Konstruktor übergeben werden kann, um anzugeben, dass der Konstruktor unique_lockdas mutex Objekt nicht sperren sollte, das ebenfalls an ihn übergeben wird.
try_to_lock Stellt ein Objekt dar, das an den Konstruktor übergeben werden kann, um anzugeben, dass der Konstruktor unique_lock versuchen soll, das mutex Objekt zu entsperren, das auch ohne Blockieren an das Objekt übergeben wird.

Siehe auch

Headerdateienreferenz