博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++11の条件变量
阅读量:4306 次
发布时间:2019-06-06

本文共 1175 字,大约阅读时间需要 3 分钟。

一、条件变量的引入

std::condition_variable 解决了死锁并且控制的资源的访问顺序二避免不必要的等待。当互斥操作不够用而引入的。比如,线程可能需要等待某个条件为真才能继续执行,而一个忙等待循环中可能会导致所有其他线程都无法进入临界区使得条件为真时,就会发生死锁。所以,condition_variable实例被创建出现主要就是用于唤醒等待线程从而避免死锁。std::condition_variable的 notify_one()用于唤醒一个线程;notify_all() 则是通知所有线程。

二、下面是一个引用的例子

// threadTest.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include 
#include
#include
#include
#include
#include
#include
using namespace std;std::deque
q;std::mutex mu;std::condition_variable cond;void function_1() { int count = 10; while (count>0) { std::unique_lock
locker(mu); q.push_back(count); locker.unlock(); cond.notify_all(); std::this_thread::sleep_for(chrono::seconds(1)); count--; }}void funciton_2() { int data = 0; while (data != 1) { std::unique_lock
locker(mu); cond.wait(locker, [](){ return !q.empty(); }); data = q.back(); q.pop_back(); locker.unlock(); cout << "t2 get a value form t1 " << data << endl; }}int main(){ thread t1(function_1); thread t2(funciton_2); t1.join(); t2.join(); std::getchar(); return 0;}

 

转载于:https://www.cnblogs.com/xietianjiao/p/10457962.html

你可能感兴趣的文章
Docker实战
查看>>
asp.net core结合Gitlab-CI实现自动化部署
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.7 版本发布
查看>>
EasyNVR H5无插件摄像机直播解决方案前端解析之:关于直播页面和视频列表页面切换的问题...
查看>>
django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板
查看>>
redis事务
查看>>
Java_基础语法之dowhile语句
查看>>
HDU 2175 汉诺塔IX
查看>>
PAT 甲级 1021 Deepest Root
查看>>
查找代码错误.java
查看>>
vc获取特殊路径(SpecialFolder)
查看>>
单例模式
查看>>
int(3)和int(11)区别
查看>>
201521123061 《Java程序设计》第十一周学习总结
查看>>
代码小思考
查看>>
Unity中的销毁方法
查看>>
ceph删除pool提示(you must first set the mon_allow_pool_delete config option to true)解决办法...
查看>>
2016-7-15(1)使用gulp构建一个项目
查看>>
CSS 设计指南(第3版) 初读笔记
查看>>
markdown学习/mou
查看>>