C++并发-同步并发
2024-10-21 02:50:23
1.等待事件
std::mutex m;
void wait()
{
std::unique_lock<std::mutex> lk(m);
lk.unlock();
std::this_thread::sleep_for(std::chrono::millisenconds(100));//休眠100毫秒
lk.lock();
}
2.条件变量等待条件
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mut;
std::queue<data_chunk> data_queue;
std::condition_variable data_cond;
void data_prepa()
{
data_chunk data; //准备数据
std::lock_guard<std::mutex> lk(mut);
data_queue.push(data);//将数据压入队列
data_cond.notify_one();//通知等待中的线程
}
void data_process()
{
std::unique_lock<std::mutex> lk(mut); //这个地方必须用这个,不能用lock_guard,因为wait后,互斥元就会一直锁定
data_cond.wait( lk,[] {return !data_queue.empty();} ); //如果条件满足返回true,否则进行阻塞,并自动解锁互斥元
data_chunk data=data_queue.front();
data_queue.pop(); //出栈
lk.unlock();
}
最新文章
- Spring aop应用之实现数据库读写分离
- [LeetCode] Intersection of Two Arrays II 两个数组相交之二
- 使用NetBeans、Eclipse阅读JDK源码
- Mvc利用淘宝Kissy uploader实现图片批量上传附带瀑布流的照片墙
- 记一次mysql故障恢复
- [问题2014S09] 复旦高等代数II(13级)每周一题(第九教学周)
- Android Studio教程从入门到精通
- 【翻译】了解ASP.NET MVC的HTML助手
- mybatis动态SQL中的sql片段
- Shell 是个什么玩意
- Xcode 向6.0以后版本添加iOS开发空白模板
- PHP导出MySQL数据到Excel文件
- opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示
- PHP 获得当前页面所有变量常量的值
- 201621123043 《Java程序设计》第3周学习总结
- 由ODI初始化资料档案库(RUC)引起修改ORACLE字符集(ZHS16GBK-AL32UTF8)
- 【jira】java.lang.OutOfMemoryError: GC overhead limit exceeded
- Go Deeper HDU - 3715(2 - sat 水题 妈的 智障)
- 深度学习课程笔记(十六)Recursive Neural Network
- Hive的用法
热门文章
- i春秋登录
- 【Serverless】Unity快速集成认证服务实现邮件登录
- servlet包找不到,webservlet注解无效
- 解决manjaro无法连接github问题
- 探讨Morest在RESTful API测试的行业实践
- JVM面试点汇总
- Zabbix技术分享——使用docker-compose快速部署zabbix监控系统
- vue3 + element plus 使用字节跳动图标
- 玩好.NET高级调试,你也要会写点汇编
- Elasticsearch提示low disk watermark [85%] exceeded on [UTyrLH40Q9uIzHzX-yMFXg][Sonofelice][/Users/baid...