Udostępnij za pośrednictwem


<condition_variable>

Określa klasy condition_variable i condition_variable_any , używane do tworzenia obiektów, które poczekaj, aż warunek, aby stać się prawdą.

Nagłówek ten używa współbieżności Runtime (ConcRT) tak, aby można go używać wraz z innych mechanizmów ConcRT.Aby uzyskać więcej informacji na temat ConcRT, zobacz Współbieżność Runtime.

#include <condition_variable>

[!UWAGA]

W kodzie, który jest kompilowana przy użyciu /clr lub /clr:pure, ten nagłówek jest zablokowany.

Hh874761.collapse_all(pl-pl,VS.110).gifUwagi

Kod, który czeka na zmienną warunkową muszą również korzystać z mutex.Wątek wywołujący musi zablokować mutex przed wywołuje funkcje, które czekać na zmienną warunkową.mutex Jest zablokowane przed po powrocie z funkcji o nazwie.mutex Nie jest zablokowany, gdy wątek oczekuje na stanie są prawdziwe.Tak, że nie są nieprzewidywalne wyniki, każdy wątek, który czeka na zmienną warunkową muszą używać tego mutex obiektu.

Obiekty typu condition_variable_any może być używany z muteksu dowolnego typu.Typ obiektu mutex, który jest używany, musi zapewnić try_lock metoda.Obiekty typu condition_variable może być używany tylko z muteksu typu unique_lock<mutex>.Obiekty tego typu może być szybsza niż obiekty typu condition_variable_any<unique_lock<mutex>>.

Oczekiwania na zdarzenie, najpierw zablokować muteksu, a następnie wywołać jeden z wait metody na zmienną warunkową.wait Wywołana bloki, dopóki zmienna warunkowa sygnały w innym wątku.

Fałszywe wakeups występują, gdy to stosowne wątki oczekujące na zmienne warunkowe odblokowany bez powiadomienia.Do rozpoznawania takich fałszywych wakeups, kod, który czeka, aż warunek, aby stać się prawdą jawnie należy sprawdzić tego warunku, gdy kod zwraca funkcję oczekiwania.Jest to zwykle wykonywane przy użyciu pętli. można użyć wait(unique_lock<mutex>& lock, Predicate pred) do wykonywania tej pętli dla Ciebie.

while (condition is false)
    wait for condition variable;

condition_variable_any i condition_variable klas każdego ma trzy metody, które czekać do określenia warunku.

  • waitczeka na okres nieograniczony czas.

  • wait_untilczeka, aż do określonej daty time.

  • wait_forczeka na określonym time interval.

Każda z tych metod ma dwie wersje przeciążone.Tylko jeden czeka i budzić się błędnie.Drugi ma argument dodatkowy szablon, który definiuje predykatu.Metoda zwraca aż predykat jest true.

Każda klasa ma również dwie metody, które są używane do powiadamiania zmienną warunkową, która jest jego stan true.

  • notify_onebudzi się jeden z wątków, które czekają na zmienną warunkową.

  • notify_allbudzi się wszystkie wątki, które oczekują na zmienną warunkową.

Zobacz też

Informacje

Klasa CONDITION_VARIABLE

Klasa condition_variable_any

Wyliczanie cv_status

Inne zasoby

Pliki nagłówków