admin管理员组文章数量:1599534
条件变量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
本文标签: 使用方法多线程conditionvariablewaitnotifyone
版权声明:本文标题:C++并发与多线程 condition_variable、wait、notify_one、notify_all使用方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728324107a1154208.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论