C++并发与多线程 condition_variable、wait、notify_one、notify_all使用方法

本文详细介绍了C++中的并发工具condition_variable的使用,包括wait、notify_one和notify_all成员函数的工作原理及应用实例。通过示例说明了如何在多线程环境下,利用条件变量实现线程间的同步与通信。
摘要由CSDN通过智能技术生成

条件变量condition_variable

假设有两个线程,一个线程A一个线程B。
线程A:等待一个条件满足.
线程B:专门往消息队列中扔消息(数据)
condition_variable是一个类,和条件相关的类,等待一个条件完成,需要和互斥量配合工作,用的时候需要生成这个类的对象。

condition_variable成员函数wait

在这里插入图片描述
第一个参数是一个锁,第二个参数是一个可调用对象。
如果第二个参数返回true,wait()直接返回。
如果第二个参数返回false,那么wati()将解锁互斥量,并堵塞直到其他某个线程调用notify_one()成员函数为止。
如果wait()没有第二个参数,那么就和第二个参数返回false的效果一样。

wait唤醒后,wait将干以下工作:
1.不断尝试重新获取互斥量锁,如果获取不到,流程就卡在wait这里等着获取,如果获取获取到了就继续执行2
2.获取到了锁然后上锁,如果wait有第二个参数,就判断第二个参数,如果第二个参数返回false,那wait又解锁互斥量,并堵塞直到其他某个线程调用notify_one()成员函数为止。
3.如果第二个参数返回true,则wait返回,流程走下去。
4.如果没有第二个参数,wait返回,流程走下去。

condition_variable成员函数notify_one

其他线程调用notify_one()将wait的状态唤醒后,wait恢复工作。
如果wait并没有堵塞,那么此时notify_one调用可能就没有效果.

使用例子

class A
{
   
private:
	list<int>msgqueue;
	mutex mymutex1
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值