Freigeben über


<condition_variable>

Definiert die Klassen condition_variable und condition_variable_any, die verwendet werden, um Objekte zu erstellen, die auf eine Bedingung warten, um ausgeführt zu werden.

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 <condition_variable>

Hinweis

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

Hinweise

Code, dass auf eine Bedingungsvariable mutex verwenden müssen. Ein aufrufenden Thread muss mutex sperren, bevor er die Funktionen aufgerufen, die auf die Bedingungsvariable warten. mutex wird dann gesperrt, wenn die aufgerufene Funktion zurückkehrt. mutex wird nicht gesperrt, während der Thread auf die Bedingung true wartet, um zu werden. Damit es keine unvorhersehbaren Ergebnissen gibt, jeder Thread, dass auf eine Bedingungsvariable das gleiche mutex-Objekt verwenden müssen.

Objekte des Typs condition_variable_any können mit einem Mutex eines Typs verwendet werden. Der Typ des Mutex, der verwendet wird, muss die try_lock-Methode nicht bereitstellen. Objekte des Typs condition_variable können mit einem Mutex des Typs unique_lock<mutex> nur verwendet werden. Objekte dieses Typs sind möglicherweise schneller als Objekte vom Typ condition_variable_any<unique_lock<mutex>>.

Um auf Ereignisse warten, sperren Sie zuerst der Mutex, und rufen Sie dann eine der Methoden wait auf der Bedingungsvariable auf. Die wait Aufruf wird blockiert auf einen anderen Thread signalisiert der Bedingungsvariable.

Unechtes Wecken tritt auf, wenn Threads, die Bedingungsvariablen wartende sind, ohne dass entsprechende Benachrichtigungen nicht blockiert werden. Um solche unechte Wecken zu erkennen, codieren Sie Wartungsarbeiten dass eine Bedingung erfüllt werden ob Bedingung explizit überprüfen sollten wenn die Coderückgaben von einem Wartevorgang arbeiten. Dies wird normalerweise durchgeführt, indem eine Schleife verwendet; Sie können wait(unique_lock<mutex>& lock, Predicate pred) verwenden, um diese Schleife für Sie ausgeführt.

while (condition is false)
    wait for condition variable;

condition_variable_any und condition_variable werden jeweils über drei Methoden, die auf eine Bedingung warten.

  • wait Wartung einen unendlichen Zeitraum.

  • wait_until wartet auf einen angegebenen time.

  • Wartet wait_for einen angegebenen time interval.

Jede dieser Methoden verfügt über zwei überladene Versionen. Ein gerade wartet und kann unecht aufwachen. Der andere akzeptiert ein zusätzliches Vorlagenargument, das ein Prädikat definiert. Die Methode wird erst zurückgegeben, wenn das Prädikat true ist.

Jede Klasse besitzt ebenfalls zwei Methoden, die verwendet werden, um eine Bedingungsvariable zu benachrichtigen, dass die Bedingung true ist.

  • notify_one wird einem der Threads auf, der die Bedingungsvariable wartet.

  • notify_all wird alle Threads, die die Bedingungsvariable warten.

Siehe auch

Referenz

condition_variable-Klasse

condition_variable_any-Klasse

cv_status-Enumeration

Weitere Ressourcen

Headerdateien der C++-Standardbibliothek