条件变量(condition_variable)

一、定义:
1.1、解释:

条件变量是利用线程间共享的变量进行同步的一种机制,是在多线程程序中用来实现"等待–>唤醒"逻辑常用的方法,用于维护一个条件(与是条件变量不同的概念),线程可以使用条件变量来等待某个条件为真,注意理解并不是等待条件变量为真。

当条件不满足时,线程将自己加入等待队列,同时释放持有的互斥锁; 当一个线程唤醒一个或多个等待线程时,此时条件不一定为真(虚假唤醒)。

1.2、个人理解:
两个线程利用条件变量及互斥锁实现同步。条件变量和互斥锁对两个线程来说是全局的
一个线程利用条件变量实现等待,同时释放锁;
一个线程获取锁后利用该条件变量唤醒等待的线程

二、用法:
2.1、std::condition_variable::wait

1void wait (unique_lock<mutex>& lck);  

对应线程让自己挂起并释放锁

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

若pred为false则对应线程挂起并释放锁,直到被唤醒,唤醒后再判断pred,若为false则继续挂起,直到被唤醒同时条件为true
相当于: while (!pred()) wait(lck);

3、std::condition_variable::notify_one

发送通知以唤醒等待队列中的线程。

4template <class Rep, class Period> cv_status wait_for (unique_lock<mutex>& lck, const chrono::duration<Rep,Period>& rel_time); 

等待直到被唤醒或超时,返回值为超时与否。其同样有另一种重载形式,与(2)类似。

三、总结:
1、注意区分条件变量与条件:条件变量是用于同步的机制,条件是条件变量控制函数执行或等待的判断依据
2、wait的两个重载方法,区别是等待时是否判断条件

参考资料:
1、 线程间同步方式详解
2、 CPP

  • 10
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值