一、总述
在C++11中,我们可以使用条件变量(condition_variable)实现多个线程间的同步操作;
当条件不满足时,相关线程被一直阻塞,
直到某种条件出现,这些线程才会被唤醒。
主要成员函数如下:
(1)wait(unique_lock &lck)
当前线程的执行会被阻塞,直到收到 notify 为止。
(2)wait(unique_lock &lck,Predicate pred)
当前线程仅在pred=false时阻塞;如果pred=true时,不阻塞。
wait()可依次拆分为三个操作:释放互斥锁、等待在条件变量上、再次获取互斥锁
2、notify_one:notify_one():没有参数、没有返回值。
解除阻塞当前正在等待此条件的线程之一。如果超过一个,不会指定具体哪一线程。
如果没有线程在等待,则该函数不执行任何操作。
// condition_variable::notify_one #include // std::cout #include // std::thread #include // std::mutex, std::unique_lock #include // std::condition_variable std::mutex mtx; std::condition_variable produce,consume; int cargo = 0; // shared value by producers and consumers void consumer () { std::unique_lock lck(mtx); while (cargo==0) consume.wait(lck); std::cout关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?