<mutex>
Schließen Sie den Standardheader ein <mutex>
, um die Klassen mutex
, recursive_mutex
, , timed_mutex
und 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 inbool
konvertierbar und weist den Werttrue
auf, wenn die Methode den Besitz erlangt, andernfallsfalse
.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_any
verwenden.
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_time
dessen Typ eine Instanziierung vonchrono::duration
. Die Methode versucht, in den Besitz von mutex zu gelangen, gibt jedoch unabhängig vom Erfolg innerhalb der inRel_time
festgelegten Zeit einen Wert zurück. Der Rückgabewert wird intrue
konvertiert, wenn die Methode in den Besitz von mutex gelangt; andernfalls wird der Rückgabewert infalse
konvertiert.Die
try_lock_until
Methode muss mit einem Argument aufgerufen werden können,Abs_time
dessen Typ eine Instanziierung vonchrono::time_point
. Die Methode versucht, in den Besitz von mutex zu gelangen, gibt jedoch unabhängig vom Erfolg nicht später als innerhalb der inAbs_time
festgelegten Zeit einen Wert zurück. Der Rückgabewert wird intrue
konvertiert, wenn die Methode in den Besitz von mutex gelangt; andernfalls wird der Rückgabewert infalse
konvertiert.
Ein mutex-Typ wird auch als sperrbarer Typ bezeichnet. Wenn sie die Memberfunktion try_lock
nicht 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_mutex ist 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_lock das 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. |