Sdílet prostřednictvím


<condition_variable>

Definuje třídy condition_variable a condition_variable_any , slouží k vytvoření objektů, které čekání na podmínku, která budou pravdivé.

Toto hlavička používá modul Concurrency Runtime (ConcRT), takže ji lze použít společně s jinými mechanismy modulu ConcRT.Další informace o modulu ConcRT naleznete v tématu Concurrency Runtime.

#include <condition_variable>

[!POZNÁMKA]

V kódu, který je zkompilován s použitím možností /clr nebo /clr:pure je tato hlavička blokována.

Poznámky

Kód, který čeká, musíte také použít proměnné stavu mutex.Nutné zamknout volající vlákno mutex před zavoláním funkce, které proměnné stavu čekání.mutex Pak uzamčen když volaná funkce vrátí.mutex Není uzamčena, zatímco podproces čeká podmínka platí stát.Tak, aby nebyly nalezeny žádné neočekávané výsledky, každý podproces, který čeká podmínka proměnné musíte používat stejný mutex objektu.

Objekty typu condition_variable_any lze použít s mutex libovolného typu.Není nutné poskytnout typ objektu mutex, který se používá try_lock metody.Objekty typu condition_variable lze použít pouze s mutex typu unique_lock<mutex>.Objekty tohoto typu může být rychlejší než objekty typu condition_variable_any<unique_lock<mutex>>.

Čekání na událost, nejprve uzamknutí mutex a poté volejte jednu z wait metody proměnné stavu.wait Volat bloky, dokud jiný podproces signalizuje stav proměnné.

Nesprávné wakeups při vhodné podprocesů, které čekají pro proměnné stavu budou odblokovány bez upozornění.Rozpoznat tyto nesprávné wakeups, kód, který čeká na podmínku, která budou pravdivé výslovně zkontrolujte tuto podmínku při vrátí kód z funkce čekání.To se obvykle provádí pomocí smyčky; můžete použít wait(unique_lock<mutex>& lock, Predicate pred) k provedení této smyčky.

while (condition is false)
    wait for condition variable;

condition_variable_any a condition_variable každá má tři metody, které čekací podmínku.

  • waitčeká na neomezené časové období.

  • wait_untilčeká, až do zadaného time.

  • wait_forčeká zadaný time interval.

Každá z těchto metod má dvě přetížené verze.Jednu právě čeká a lze probudit spuriously.Druhá má další šablony argument, který určuje predikátu.Metoda nevrátí, dokud není predikát true.

Každá třída má také dvě metody, které slouží k upozornění podmínka proměnnou, která je jeho stav true.

  • notify_oneNěkteré z vláken, které čeká proměnné stavu probuzení.

  • notify_allvšechny podprocesy, které čekají na proměnné stavu probuzení.

Viz také

Referenční dokumentace

condition_variable – třída

condition_variable_any – třída

cv_status – výčet

Další zdroje

Standardní knihovna C++ – hlavičkové soubory