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 erfüllt werden.

Dieser Header verwendet Concurrency Runtime (ConcRT) für Sie ihn mit anderen ConcRT-Mechanismen verwenden können.Weitere Informationen zu ConcRT, finden Sie unter Concurrency Runtime.

#include <condition_variable>
HinweisHinweis

In Code, der kompiliert wird, indem /clr oder /clr:pure verwendet, wird dieser Header blockiert.

Hh874761.collapse_all(de-de,VS.110).gifHinweise

Code, dass Wartung eine Bedingungsvariable mutex auch verwenden müssen.Ein aufrufenden Thread muss mutex sperren, bevor er die Funktionen beschrieben, die auf die Bedingungsvariable warten.mutex wird dann gesperrt, wenn die aufgerufene Funktion zurückgibt.mutex wird nicht gesperrt, während der Thread auf die Bedingung wartet, um erfüllt werden.Damit keine unvorhersehbaren Ergebnissen gibt, jeder Thread, dass Wartung eine Bedingungsvariable dasselbe Objekt mutex verwenden müssen.

Objekte des Typs condition_variable_any können mit einem Mutex eines beliebigen 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 ein Ereignis wartet, sperren Sie zuerst die Mutex, und rufen Sie dann eine der wait-Methoden auf der Bedingungsvariable auf.Die wait Aufruf wird blockiert auf einen anderen Thread signalisiert der Bedingungsvariable.

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

while (condition is false)
    wait for condition variable;

condition_variable_any und condition_variable klassifiziert jeweils über drei Methoden, die für eine Bedingung warten.

  • wait Wartung einen unbegrenzten Zeitraum.

  • wait_until wartet bis angegebenes time.

  • wait_for Wartung angegebenes time interval.

Jede dieser Methoden verfügt über zwei überladene Versionen.Ein derzeit 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 enthält auch zwei Methoden, die verwendet werden, um eine Bedingungsvariable zu benachrichtigen, dass seine Zustand true ist.

  • notify_one wird einen 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