资源简介
基本纯使用标准C++库,与平台无关,主要使用多线程、互斥锁、条件变量。演示多个生产者多个消费者之间的同步问题
代码片段和文件信息
#include
#include
#include
#include
#include
#include
using namespace std;
unsigned long long ResourceNumber = 0;//缓冲区资源数目
unsigned long long ResourcePool = 10;//缓冲区最大容量
mutex GlobalMutex;//全局的互斥锁
condition_variable GlobalCV;//全局的条件变量
bool run = true;//控制各线程是否运行
chrono::milliseconds *ProduceTime;//生产时间
chrono::milliseconds *ConsumerTime;//消费时间
void Consumer(int id)
{
while(run)
{
this_thread::sleep_for(*ConsumerTime);//C++11线程睡眠
unique_lock lock(GlobalMutex);//新建互斥锁
while(ResourceNumber <= 0)
GlobalCV.wait(lock);//如果没有资源,则进入等待状态
ResourceNumber--;//令资源数目减1
cout << “No.“ << id << “ consume a goods. Now resource number is: “ << ResourceNumber << endl;//输出语句提示
lock.unlock();//解锁
GlobalCV.notify_all();//唤醒其他所有线程
}
}
void Producer(int id)
{
while(run)
{
this_thread::sleep_for(*ProduceTime);//C++11线程睡眠
unique_lock lock(GlobalMutex);
while(ResourceNumber >= ResourcePool)
GlobalCV.wait(lock);
ResourceNumber++;//令资源数目加1
cout << “No.“ << id
评论
共有 条评论