std::mutex mtx;//定义互斥锁,做线程间的互斥操作
std::condition_variable cv;//定义条件变量,做线程间的同步通信操作
//生产者线程
void put(int val)
{
lock_guard<std::mutex> guard(mtx);
while(!que.empty())
{
//queue不为空,生产者应该通知消费者去消费,消费完了 再继续生产
//生产在进入等待状态 并且把互斥锁释放掉
unique_lock<std::mutex>lck(mtx);
cv.wait(lck);
}
queue.push(val);
cv.notify_all();//通知其他线程,我生产了一个产品,你们快去消费,其他线程由等待状态-》阻塞状态-》获取互斥锁才能继续执行
cout<<"生产者 生产:"<<val<<"号物品"<<endl;
}
//消费者线程
int get()
{
lock_guard<std::mutex> guard(mtx);
while(que.empty())
{
//消费者发现que是空的,通知生产者线程生产物品
//进入等待状态,把互斥锁mutex释放
unique_lock<std::mutex>lck(mtx);
cv.wait();
}
int val=que.front();
que,pop();
cv.notify_all();
cout<<"消费者 消费"<<val<<"号物品"<<endl;
return val;
}
进程间同步通信-生产者消费者模型
最新推荐文章于 2024-08-12 16:55:46 发布