一、题目要求
生产者消费者模型:在多线程下生产0~100个数,生产者线程1生产20个数据后,消费者线程1进行消费输出。
二、解答
使用到的技术:互斥锁、条件变量、多线程、双端队列
#if 1
#include<iostream>
#include<deque>
#include<mutex>
#include<condition_variable>
using namespace std;
mutex mtx;
std::condition_variable cv;
class Queue
{
public:
//生产数据: index是生产者编号,val是生产的结果
void PushData(int index, int val)
{
unique_lock<mutex> lock(mtx);
//size == 20
cv.wait(lock, [this]()->bool {
return qu.size() != 20; });
qu.push_back(val);
cv.notify_all();
cout << "Producer:" << index << " " << "val:" << val << endl;
}
//消费数据: index是消费者编号
void PopData(int index)
{
unique_lock<mutex> lock(mtx);
//!qu空 ->真 , 继续执行
cv.wait(lock, [this]()->bool {
return !qu.empty(); });
int val = qu.front();
qu.pop_front();
cv.notify_all();
cout << "Customer:" << index << " " << "val:" << val << endl;
}
private:
deque<int> qu;
};
void Producer(Queue& qu, int index)
{
for (int i = 0; i < 100; ++i)
{
qu.PushData(index, i);
}
}
void Customer(Queue& qu, int index)
{
for (int i =