<condition_variable>
Definiuje klasy condition_variable i condition_variable_any używane do tworzenia obiektów, które oczekują, aż warunek stanie się spełniony.
Ten nagłówek używa środowiska uruchomieniowego współbieżności (ConcRT), aby można było go używać razem z innymi mechanizmami ConcRT. Aby uzyskać więcej informacji na temat środowiska ConcRT, zobacz Środowisko uruchomieniowe współbieżności.
Wymagania
Nagłówek:<condition_variable>
Przestrzeń nazw: std
Uwaga
W kodzie skompilowanym przy użyciu / clr ten nagłówek jest blokowany.
Uwagi
Kod, który czeka na zmienną warunku, musi również używać zmiennej mutex
. Wątek wywołujący musi zablokować mutex
element przed wywołaniem funkcji, które oczekują na zmienną warunku. Element mutex
jest następnie blokowany, gdy wywołana funkcja zwraca wartość . Element mutex
nie jest zablokowany, gdy wątek czeka, aż warunek stanie się prawdziwy. Aby nie było nieprzewidywalnych wyników, każdy wątek, który czeka na zmienną warunku, musi używać tego samego mutex
obiektu.
Obiekty typu condition_variable_any
mogą być używane z mutexem dowolnego typu. Typ używanego mutexu nie musi podawać try_lock
metody. Obiekty typu condition_variable
mogą być używane tylko z mutex typu unique_lock<mutex>
. Obiekty tego typu mogą być szybsze niż obiekty typu condition_variable_any<unique_lock<mutex>>
.
Aby poczekać na zdarzenie, najpierw zablokuj mutex, a następnie wywołaj jedną z wait
metod w zmiennej warunku. Wywołanie wait
blokuje się, dopóki inny wątek nie sygnalizuje zmiennej warunku.
Fałszywe wznawianie występuje, gdy wątki oczekujące na zmienne warunku stają się odblokowane bez odpowiednich powiadomień. Aby rozpoznać takie fałszywe wznawianie, kod, który czeka na warunek, aby stał się prawdziwy, powinien jawnie sprawdzić ten warunek, gdy kod powraca z funkcji wait. Zwykle odbywa się to przy użyciu pętli; Możesz użyć wait(unique_lock<mutex>& lock, Predicate pred)
polecenia , aby wykonać tę pętlę.
while (condition is false)
wait for condition variable;
Klasy condition_variable_any
i condition_variable
mają trzy metody oczekiwania na warunek.
wait
czeka na niezwiązany okres.wait_until
czeka do określonegotime
.wait_for
czeka na określonytime interval
element .
Każda z tych metod ma dwie przeciążone wersje. Jeden po prostu czeka i może obudzić się złudnie. Drugi przyjmuje dodatkowy argument szablonu, który definiuje predykat. Metoda nie zwraca się do momentu, gdy predykat ma wartość true
.
Każda klasa ma również dwie metody, które są używane do powiadamiania zmiennej warunku, że jej warunek to true
.
notify_one
Budzi się jeden z wątków, które czekają na zmienną warunku.notify_all
Budzi się wszystkie wątki, które czekają na zmienną warunku.
Funkcje i wyliczenia
void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk);
enum class cv_status { no_timeout, timeout };
Zobacz też
Odwołanie do plików nagłówka
condition_variable, klasa
condition_variable_any, klasa