Freigeben über


<mutex>

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

Für diesen Header wird "Concurrency Runtime (ConcRT)" verwendet, sodass er zusammen mit anderen ConcRT-Mechanismen verwendet werden kann. Weitere Informationen über ConcRT finden Sie unter Concurrency Runtime.

#include <mutex>

Hinweise

Hinweis

In Code, der mithilfe von /clr oder /clr:pure kompiliert wird, wird dieser Header blockiert.

Die Klassen mutex und recursive_mutex sind Mutextypen. Ein Mutextyp hat einen Standardkonstruktor und einen Destruktor, der keine Ausnahmen auslöst. Diese Objekte verfügen über Methoden, die gegenseitigen Ausschluss erzeugen, wenn mehrere Threads versuchen, das gleiche Objekt zu sperren. Insbesondere enthält ein Mutextyp die Methoden lock, try_lock und unlock:

  • Die lock-Methode blockiert den aufrufenden Thread, bis der Thread den Besitz der Mutex erhält. Der Rückgabewert wird ignoriert.

  • Die try_lock-Methode versucht, den Besitz der Mutex abzurufen, ohne zu blockieren. Der Rückgabetyp ist bool konvertierbar und ist, true, wenn die Methode Besitz erhält, jedoch ist andernfalls false.

  • Die unlock-Methode gibt den Besitz der Mutex vom aufrufenden Thread frei.

Sie können Mutextypen als Typargumente verwenden, um die Vorlagen lock_guard und unique_lock zu instanziieren. Sie können Objekte dieser Typen das Lock als Argument verwenden zu den Wartevorgangsmemberfunktionen in der Vorlage unter condition_variable_any.

Ein Mutextyp zeitgesteuertes wird den Anforderungen für einen Mutextyp erfüllen. Außerdem verfügt er die try_lock_for und try_lock_until-Methoden, die aufgerufen werden müssen, indem ein Argument verwenden und muss einem Typ zurückgeben, der in bool konvertiert werden kann. Ein Mutextyp zeitgesteuertes kann diese Funktionen definieren, indem zusätzliche Argumente verwendet, vorausgesetzt, dass diese zusätzlichen Argumente alle Standardwerte verfügen.

  • Die try_lock_for-Methode muss aufgerufen werden können, indem ein Argument, Rel_time verwendet, dessen Typ eine Instanziierung von chrono::duration. Die Methode versucht, den Besitz der Mutex abzurufen, aber wird in der Uhrzeit, die durch Rel_time festgelegt wird, unabhängig davon Erfolg zurück. Der Rückgabewert konvertiert true, wenn die Methode Besitz wird; andernfalls die Rückgabewertbekehrten zu false.

  • Die try_lock_until-Methode muss aufgerufen werden können, indem ein Argument, Abs_time verwendet, dessen Typ eine Instanziierung von chrono::time_point. Die Methode versucht, den Besitz der Mutex, gibt jedoch als die Zeit, die durch Abs_time festgelegt wird, unabhängig davon Erfolg nicht später zu erhalten. Der Rückgabewert konvertiert true, wenn die Methode Besitz wird; andernfalls die Rückgabewertbekehrten zu false.

Ein Mutextyp wird auch als verschließbarer Typ. Wenn nicht die Memberfunktionen try_lock bietet, ist es ein grundlegender verschließbarer Typ. Ein Mutextyp zeitgesteuertes wird auch als verschließbarer zeitgesteuertes Typ.

Klassen

Name

Beschreibung

lock_guard-Klasse

Stellt eine Vorlage dar, die instanziiert werden kann, um ein Objekt zu erstellen, dessen Destruktor mutex entsperrt.

mutex-Klasse (STL)

Stellt einen Mutex-Typ dar. Verwenden Sie Objekte dieses Typs, um gegenseitigen Ausschluss innerhalb eines Programms zu erzwingen.

recursive_mutex-Klasse

Stellt einen Mutex-Typ dar. Im constrast der mutex-Klasse, ist das Verhalten der aufrufenden Sperrenmethoden für Objekte, die bereits gesperrt werden, genau definiert.

recursive_timed_mutex-Klasse

Stellt einen zeitgesteuerten Mutextyp dar. Verwenden Sie Objekte dieses Typs den gegenseitigen Ausschluss, um zu erzwingen, der die Blockierung innerhalb eines Programms Zeit-eingeschränkt hat. Anders als Objekte vom Typ timed_mutex, besteht die Auswirkung des mehrmaligen Aufrufens von Sperrenmethoden für recursive_timed_mutex-Objekte genau definiert.

timed_mutex-Klasse

Stellt einen zeitgesteuerten Mutextyp dar. Verwenden Sie Objekte dieses Typs den gegenseitigen Ausschluss, um zu erzwingen, der die Blockierung innerhalb eines Programms Zeit-eingeschränkt hat.

unique_lock-Klasse

Stellt eine Vorlage dar, die instanziiert werden kann, um Objekte zu erstellen, die die Sperre und das Entsperren von mutex verwalten.

Funktionen

Name

Beschreibung

call_once-Funktion

Stellt einen Mechanismus für ein angegebenes Objekt aufrufen aufrufbares genau einmal für die Ausführung bereit.

lock-Funktion

Versucht, alle Argumente ohne Deadlock zu sperren.

Strukturen

Name

Beschreibung

adopt_lock_t-Struktur

Stellt einen Typ dar, der verwendet wird, um adopt_lock zu definieren.

defer_lock_t-Struktur

Stellt einen Typ dar, der ein defer_lock-Objekt definiert, das verwendet wird, um einen der überladenen Konstruktoren von unique_lock auszuwählen.

once_flag-Struktur

Stellt struct dar, der der Vorlagenfunktion call_once verwendet wird, um, dass Initialisierungscode nur einmal aufgerufen wird, sogar bei Ausführungsthreads sicherzustellen.

try_to_lock_t-Struktur

Stellt struct dar, das ein try_to_lock-Objekt definiert und verwendet wird, um einen der überladenen Konstruktoren von unique_lock auszuwählen.

Variablen

Name

Beschreibung

adopt_lock-Variable

Stellt ein Objekt dar, das an Konstruktoren für lock_guard übergeben werden kann und unique_lock anzugeben, dass das Mutex Objekt, die ebenfalls dem Konstruktor übergeben wird, gesperrt wird.

defer_lock-Variable

Stellt ein Objekt, das an den Konstruktor für unique_lock übergeben werden kann dar, dass der Konstruktor das Mutex-Objekt nicht sperren sollte, das auch an ihne übergeben wird.

try_to_lock-Variable

Stellt ein Objekt dar, das an den Konstruktor übergeben werden kann, sodass unique_lock angibt, dass der Konstruktor versuchen soll, mutex zu entsperren, der auch an ihn übergebene, ohne zu blockieren.

Siehe auch

Weitere Ressourcen

Headerdateien der C++-Standardbibliothek