admin管理员组文章数量:1599541
一、定义:
1.1、解释:
条件变量是利用线程间共享的变量进行同步的一种机制,是在多线程程序中用来实现"等待–>唤醒"逻辑常用的方法,用于维护一个条件(与是条件变量不同的概念),线程可以使用条件变量来等待某个条件为真,注意理解并不是等待条件变量为真。
当条件不满足时,线程将自己加入等待队列,同时释放持有的互斥锁; 当一个线程唤醒一个或多个等待线程时,此时条件不一定为真(虚假唤醒)。
1.2、个人理解:
两个线程利用条件变量及互斥锁实现同步。条件变量和互斥锁对两个线程来说是全局的。
一个线程利用条件变量实现等待,同时释放锁;
一个线程获取锁后利用该条件变量唤醒等待的线程。
二、用法:
2.1、std::condition_variable::wait
1、void wait (unique_lock<mutex>& lck);
对应线程让自己挂起并释放锁
2、template <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
发送通知以唤醒等待队列中的线程。
4、template <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
本文标签: 变量条件conditionvariable
版权声明:本文标题:条件变量(condition_variable) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728321997a1153945.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论