C++11之生产者消费者
来源:互联网 发布:奶油知多少 编辑:程序博客网 时间:2024/05/19 00:54
#include <mutex>#include <condition_variable>#include <deque>#include <iostream>using namespace std;// 定义两个条件变量// 队列未满std::condition_variableQueueNotFull;// 队列不空std::condition_variableQueueNotEmpty;// 队列锁std::mutexQueueMutex;// 队列std::deque<int>Que;enum{// 队列的最大容量MaxSize = 16};// 判断队列是否为空boolEmpty(){return Que.empty();}// 判断队列是否已满boolFull(){return Que.size() == MaxSize;}// 往队列中添加数据voidPut(int element){// 加锁std::unique_lock<std::mutex> locker(QueueMutex);// 如果队列已经满了,那么等待while (Full()){cout << "Full !! Wait !!" << endl;QueueNotFull.wait(locker);}Que.push_back(element);// 通知其他线程,队列不空QueueNotEmpty.notify_all();}// 从队列中取出数据intGet(){// 加锁std::unique_lock<std::mutex> locker(QueueMutex);// 如果队列为空,那么等待while (Empty()){cout << "Empty!! Wait!!" << endl;QueueNotEmpty.wait(locker);}int t = Que.front();Que.pop_front();// 通知其他等待的对象,队列不满QueueNotFull.notify_all();return t;}// 消费者线程void GetFunc(){while (1){int var;var = Get();cout << "Get : " << var << endl;}}// 生产者线程void PutFunc(){srand((unsigned int)time(0));while (1){int var = rand()%100;Put(var);}}int main(int arc,char** argv){// 启动两个线程std::thread td1(GetFunc);std::thread td2(PutFunc);td1.join();td2.join();return 0;}
0 0
- C++11之生产者消费者
- C语言之生产者与消费者模型
- 生产者消费者---C实现
- c 生产者与消费者
- 多线程之生产者-消费者
- 多线程之生产者消费者
- 多线程之生产者-消费者
- 线程之“生产者消费者”
- 多线程之生产者消费者
- 线程之生产者消费者
- 多线程之生产者消费者
- 多线程之:生产者消费者
- 线程之生产者、消费者
- [C++]_[初级]_[pthread多线程之生产者消费者模型]
- 生产者与消费者(C#)
- c实现生产者消费者源代码
- C进程生产者与消费者
- 生产者消费者模式in C
- 蒙太奇式的产品设计--老吴说产品
- android测试工具MonkeyRunner--google官网翻译
- Sicily 1321(Dijkstra算法)
- 为本地项目建立版本管理
- python爬虫获取郑大教务在线成绩数据
- C++11之生产者消费者
- linux下设置SSH服务开机启动
- Linux常用命令
- iOS 设计模式 - 单例模式
- JCIP-3-Sharing Objects
- Android知识结构图
- <LeetCode OJ> 278. First Bad Version
- iOS获取设备全局信息方法总结(如信号,电量,设备标示)
- spark源码学习(一):sparkContext的初始化分析(一)