// Dexic.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
#include <mutex>
#include <condition_variable>
#include <deque>
#include <iostream>
using namespace std;
std::condition_variable QueueNotFull;
std::condition_variable QueueNotEmpty;
std::mutex QueueMutex;
std::deque<int> Que;
const int MaxSize = 10;
bool isEmpty() {
return Que.empty();
}
bool isFull() {
return Que.size() == MaxSize;
}
void dataPut(int element) {
std::unique_lock<std::mutex> locker(QueueMutex);
while (isFull() )
{
cout << "Queue is Full !!" << endl;
QueueNotFull.wait(locker);
}
Que.push_back(element);
QueueNotEmpty.notify_all();
}
int dataGet() {
std::unique_lock<std::mutex> locker(QueueMutex);
while (isEmpty())
{
cout << "Queue is Empty !!" << endl;
QueueNotEmpty.wait(locker);
Sleep(1000);
}
int t = Que.front();
Que.pop_front();
QueueNotFull.notify_all();
return t;
}
void getFunc() {
while (1) {
int var;
var = dataGet();
cout << "Get data :" << var << endl;
Sleep(1000);
}
}
void putFunc() {
//srand((unsigned int)time(0));
int i = 0;
while (i < 100) {
dataPut(i++);
//int var = rand() % 100;
//dataPut(var);
}
}
int main(int arc, char** argv)
{
cout << "Hello World" << endl;
std::thread td1(getFunc);
std::thread td2(putFunc);
td1.join();
td2.join();
return 0;
}
C++生产者消费者
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...