<condition_variable><condition_variable>

Definiuje klasy condition_variable i condition_variable_any , które są używane do tworzenia obiektów, które oczekują na spełnienie warunku.Defines the classes condition_variable and condition_variable_any that are used to create objects that wait for a condition to become true.

Ten nagłówek używa środowisko uruchomieniowe współbieżności (ConcRT), aby można było używać go razem z innymi mechanizmami ConcRT.This header uses Concurrency Runtime (ConcRT) so that you can use it together with other ConcRT mechanisms. Aby uzyskać więcej informacji na temat ConcRT, zobacz środowisko uruchomieniowe współbieżności.For more information about ConcRT, see Concurrency Runtime.

WymaganiaRequirements

Nagłówek:<condition_variable>Header: <condition_variable>

Przestrzeń nazw: stdNamespace: std

Uwaga

W kodzie, który jest kompilowany przy użyciu /CLR, ten nagłówek jest zablokowany.In code that is compiled by using /clr, this header is blocked.

UwagiRemarks

Kod, który czeka dla zmiennej warunku, musi również używać elementu mutex .Code that waits for a condition variable must also use a mutex. Wątek wywołujący musi blokować mutex przed wywołaniem funkcji, które oczekują na zmienną warunku.A calling thread must lock the mutex before it calls the functions that wait for the condition variable. mutexPo wywołaniu wywoływana funkcja jest blokowana.The mutex is then locked when the called function returns. mutexNie jest zablokowany, gdy wątek czeka na warunek, aby stał się spełniony.The mutex is not locked while the thread waits for the condition to become true. Aby nie miały żadnych nieprzewidzianych wyników, każdy wątek, który czeka na zmienną warunku, musi używać tego samego mutex obiektu.So that there are no unpredictable results, each thread that waits for a condition variable must use the same mutex object.

Obiekty typu condition_variable_any mogą być używane z mutex dowolnego typu.Objects of type condition_variable_any can be used with a mutex of any type. Typ obiektu mutex, który jest używany, nie musi podawać try_lock metody.The type of the mutex that is used does not have to provide the try_lock method. Obiektów typu condition_variable można używać tylko z obiektem mutex typu unique_lock<mutex> .Objects of type condition_variable can only be used with a mutex of type unique_lock<mutex>. Obiekty tego typu mogą być szybsze niż obiekty typu condition_variable_any<unique_lock<mutex>> .Objects of this type may be faster than objects of type condition_variable_any<unique_lock<mutex>>.

Aby poczekać na zdarzenie, najpierw Zablokuj element mutex, a następnie Wywołaj jedną z wait metod dla zmiennej warunku.To wait for an event, first lock the mutex, and then call one of the wait methods on the condition variable. waitBloki wywołań do momentu, gdy inny wątek sygnalizuje zmienną warunku.The wait call blocks until another thread signals the condition variable.

Wznawianie fałszywe odbywa się, gdy wątki oczekujące na zmienne warunku staną się odblokowane bez odpowiednich powiadomień.Spurious wakeups occur when threads that are waiting for condition variables become unblocked without appropriate notifications. Aby można było rozpoznać takie wznowienie fałszywe, kod, który czeka na warunek do jego działania, powinien jawnie sprawdzić ten warunek, gdy kod wraca z funkcji oczekiwania.To recognize such spurious wakeups, code that waits for a condition to become true should explicitly check that condition when the code returns from a wait function. Jest to zwykle realizowane przy użyciu pętli; Możesz użyć, wait(unique_lock<mutex>& lock, Predicate pred) Aby wykonać tę pętlę.This is usually done by using a loop; you can use wait(unique_lock<mutex>& lock, Predicate pred) to perform this loop for you.

while (condition is false)
    wait for condition variable;

condition_variable_anyKlasy i condition_variable mają trzy metody, które oczekują na warunek.The condition_variable_any and condition_variable classes each have three methods that wait for a condition.

  • wait czeka na nieokreślony czas.wait waits for an unbounded time period.

  • wait_until czeka do określonego time .wait_until waits until a specified time.

  • wait_for czeka na określony time interval .wait_for waits for a specified time interval.

Każda z tych metod ma dwie przeciążone wersje.Each of these methods has two overloaded versions. Zaraz czeka i można wzbudzać obudzić.One just waits and can wake up spuriously. Druga przyjmuje dodatkowy argument szablonu, który definiuje predykat.The other takes an additional template argument that defines a predicate. Metoda nie zwraca aż do predykatu true .The method does not return until the predicate is true.

Każda klasa ma także dwie metody, które są używane do powiadamiania zmiennej warunku o stanie true .Each class also has two methods that are used to notify a condition variable that its condition is true.

  • notify_one wznawia jeden z wątków, które oczekują na zmienną warunku.notify_one wakes up one of the threads that is waiting for the condition variable.

  • notify_all wznawia wszystkie wątki oczekujące na zmienną warunku.notify_all wakes up all of the threads that are waiting for the condition variable.

Funkcje i wyliczeniaFunctions and Enums

void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk);

enum class cv_status { no_timeout, timeout };

Zobacz teżSee also

Dokumentacja plików nagłówkowychHeader Files Reference
Klasa condition_variablecondition_variable Class
Klasa condition_variable_anycondition_variable_any Class