conditon_variable(条件变量)用于线程间同步

Posted defe_feath

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了conditon_variable(条件变量)用于线程间同步相关的知识,希望对你有一定的参考价值。

conditon_variable(条件变量)用于线程间同步

condition_variable有5个函数,函数名及对应的功能如下:

wait阻塞自己,等待唤醒

wait_for阻塞自己,等待唤醒,最多等待一段时间

wait_until阻塞自己,等待唤醒,最多等待到某个时间点

notify_one 唤醒一个等待在这个条件变量上的线程

notify_all 唤醒所有等待在这个条件变量上的线程

3个wait函数都要求输入一个已经上锁的unique_lock<mutex>变量,并且都有两个版本,一个版本接受一个比较器,而另一个没有。用wait来举例说明:

void wait(unique_lock<mutex> &lck);

template<class Predicate> void wait(unique_lock<mutex> &lck,Predicate pred);

第二个版本可解决虚假唤醒的问题,其行为类似  while( !pred() ) wait(lck); 如果标准库不提供这个版本,我们就只能自己写这些代码了

 

condition_variable_any与condition_variable基本一致,区别只是在于condition_variable要求的互斥锁只能用unique_lock<mutex> ,而condition_variable_any则不作限制。

 

以上是关于conditon_variable(条件变量)用于线程间同步的主要内容,如果未能解决你的问题,请参考以下文章

C++线程间的互斥和通信

NSPredicate 用于检查与其他变量匹配的 CoreData 属性是不是满足条件

条件变量与信号量

Go36-27,28-条件变量

用于回溯变量的使用和依赖性的算法

Condition条件变量