工作中有时候会有遇到边生产边消费的异步场景,这里写了一个简单的demo。
Mutex.hpp
#include <iostream>
#include <deque>
#include <thread>
#include <mutex>
std::deque<int> q;
std::mutex mu;
std::condition_variable cond; //使用条件变量
// 生产者
void Producer()
{
int count = 1;
while (1)
{
std::unique_lock<std::mutex> locker(mu);
q.push_front(count);
std::cout << "生产数据: " << count << std::endl;
locker.unlock();
//唤醒某个等待(wait)线程。如果当前没有等待线程,则该函数什么也不做,如果同时存在多个等待线程,则唤醒某个线程是不确定的(unspecified)。
cond.notify_one(); //除了notify_one()函数,c++还提供了notify_all()函数,可以同时唤醒所有处于wait状态的条件变量。
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
count++;
}
}
// 消费者
void Consumer()
{
int data = 0;
while (1)
{
std::unique_lock<std::mutex> locker(mu);
//eg1: lambda函数返回true,w