C++11/std::condition_variable – 生产者消费者模型
原创文章,作者:StubbornHuang,如若转载,请注明出处:《C++11/std::condition_variable – 生产者消费者模型》https://www.stubbornhuang.com/779/
代码示例:
#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
#include <deque>
#include <condition_variable>
std::deque<int> global_deque;
std::mutex global_mutex;
std::condition_variable global_ConditionVar;
// 生产者线程
void Producer()
{
while (true)
{
// 休眠5毫秒
std::this_thread::sleep_for(std::chrono::milliseconds(5));
std::unique_lock<std::mutex> lock(global_mutex);
global_deque.push_front(1);
std::cout << "生产者生产了数据" << std::endl;
global_ConditionVar.notify_all();
}
}
// 消费者线程
void Consumer()
{
while (true)
{
std::unique_lock<std::mutex> lock(global_mutex);
// 当队列为空时返回false,则一直阻塞在这一行
global_ConditionVar.wait(lock, [] {return !global_deque.empty(); });
global_deque.pop_back();
std::cout << "消费者消费了数据" << std::endl;
global_ConditionVar.notify_all();
}
}
int main()
{
std::thread consumer_Thread(Consumer);
//std::thread consumer_Thread1(Consumer);
std::thread producer_Thread(Producer);
consumer_Thread.join();
//consumer_Thread1.join();
producer_Thread.join();
getchar();
return 0;
}
当前分类随机文章推荐
- C++ - 线程安全的std::cout
- C++11/std::condition_variable - 生产者消费者模型
- C++ - 控制台程序在控制台窗口可变参数格式化带颜色输出日志信息
- C++ - 字节数组byte与int的相互转换
- C++ Map中存储动态指针时正确释放内存
- C++ - vector存储动态指针时正确释放内存
- C++11/std::thread - 可作为线程函数的几种方式总结
- C++ - 使用Websocket++编写客户端连接WebSocket服务器并进行通信
- C++ - 使用C++标准库过滤Windows文件名中的非法字符
- C++11 - std::string - stod/stof/stoi/stol/stold/stoll/stoul/stoull,由std::string转换为int/long/float/double等其他类型
全站随机文章推荐
- 资源分享 - Qt5.9 c++开发指南 PDF下载
- Centos7 - frp内网穿透,访问内网web服务/访问内网websocket服务
- OpenCV - 打开摄像头并对摄像头获取的每一帧图像进行Canny算子边缘化提取操作
- 资源分享 - OpenGL编程指南(原书第8版)- OpenGL红宝书高清带书签PDF下载
- 工具网站推荐 - 欧拉角四元数在线可视化转化网站/三维在线旋转变换网站
- VTK读取序列的Dicom医学图片,用Marchingcube进行重建,并保存为obj文件
- 资源分享 - Efficient Illumination Algorithms for Global Illumination In Interactive and Real-Time Rendering英文PDF下载
- 资源分享 - 深入应用C++ 11代码优化与工程级应用(祁宇著)PDF下载
- OpenCV - 读取一张图片显示,并将其重写为灰度图
- 资源分享 - 解读基金:我的投资观与实践(季凯帆,康峰著)PDF下载