基于C++的condition_variable实现的生产者消费者模型,main函数中创建两个线程(生产者和消费者),生产者随机生成一个数字并push_back进容器,消费者则从容器中pop_back一个数,当容器没有数据时,消费者线程挂起,等待生产者线程生产数据并唤醒消费者线程。
#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
#include <time.h>
#include <Windows.h>
#include <condition_variable>
using namespace std;
mutex mtx;
condition_variable consume;
//定义消费工厂,生产者添加数据,消费者取走数据
vector<int> factory;
//消费者线程入口函数
void f_consumer()
{
unique_lock<mutex> lk(mtx);
while (true)
{
consume.wait(lk, []() {return factory.size() > 0; });
cout << "线程" << GetCurrentThreadId() << "消费了:" << factory.at(factory.size() - 1) << endl;
factory.pop_back();
Sleep(800);
}
}
//生产者线程入口函数
void f_producer()
{
srand(time(NULL));
while (true)
{
int num = rand() % 100;
factory.push_back(num);
cout << "生产了:" << num << endl;
Sleep(600);
consume.notify_all();
}
}
int main()
{
thread producer(f_producer);
thread consumer(f_consumer);
producer.join();
consumer.join();
system("pause");
return 0;
}