<condition_variable>

定义用于创建对象等待条件变为 true 选件类 condition_variablecondition_variable_any

此标头使用并发运行时 (ConcRT),以便可以与其他 ConcRT framework 一起使用它。 有关 ConcRT 的更多信息,请参见 并发运行时

#include <condition_variable>

备注

使用 /clr/clr:pure,在生成的代码,则此标头块。

Hh874761.collapse_all(zh-cn,VS.110).gif备注

代码等待情况变量也必须使用 mutex。 调用的线程必须锁定 mutex 中,然后调用等待情况变量的功能之前。 当调用函数返回时,mutex 然后被锁定。 当线程等待该条件变为 true 时,mutex 不锁定。 因此不能不可预知的结果,等待情况变量的每个线程都必须使用相同 mutex 对象。

类型 condition_variable_any 对象可用于任何类型 mutex。 使用 mutex 的类型不必提供 try_lock 方法。 类型 condition_variable 对象只能用于类型 **unique_lock<mutex>**mutex。 此类型对象与类型 **condition_variable_any<unique_lock<mutex>>**对象可以更快。

等待事件,第一个锁 mutex,然后调用一个在条件变量的 wait 方法。 wait 调用块直至其他线程信号情况变量。

"虚拟"唤醒 发生,当等待情况变量的线程已取消阻止,没有相应的通知。 若要识别此"虚拟"唤醒,等待条件变为 true 的代码应显式检查种情况下,当代码从等待函数时返回。 使用循环,这通常执行;可以使用 wait(unique_lock<mutex>& lock, Predicate pred) 为您执行此循环。

while (condition is false)
    wait for condition variable;

condition_variable_anycondition_variable 类别每个具有挂起情况的三种方法。

  • wait 等待一个无限制的时间段。

  • 直到指定的 time的wait_until 等待。

  • wait_for 等待指定的 time interval。

上述每种方法有两个重载版本。 一个等待并能抵御伪造地醒。 另一个采用定义谓词的其他模板参数。 方法不返回,直到谓词是 true。

每选件类还具有用于通知情况变量的两个方法其行为是 true。

  • notify_one 会唤醒等待情况变量的其中一个线程。

  • notify_all 会唤醒等待情况变量的所有线程。

请参见

参考

condition_variable选件类

condition_variable_any选件类

cv_status枚举

其他资源

标头文件