• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-11
  • 语言: C/C++
  • 标签:

资源简介

基本纯使用标准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

评论

共有 条评论