c++11 实现条件变量以及利用条件变量实现多生成者与多消费者模型

自定义条件变量类:

#pragma once
/// 
/// 用C++11实现跨平台的条件等待类
/// 

#include
#include
#include 

class LanWaitCondition
{
   
public:
    LanWaitCondition();
    ~LanWaitCondition();

    /// 
    /// 等待
    /// 
    void Wait();

    /// 
    /// 唤醒一个
    /// 
    void NotifyOne();

    /// 
    /// 唤醒所有
    /// 
    void NotifyAll();

private:
    std::mutex m_mutex; //锁
    std::condition_variable m_cv;   //阻塞等待条件
    int m_waitCount = 0;    //等待次数
    int m_wakeupCount = 0;    //唤醒次数
};


#include "LanWaitCondition.h"

LanWaitCondition::LanWaitCondition()
{
   
}

LanWaitCondition::~LanWaitCondition()
{
   
}

void LanWaitCondition::Wait()
{
   
    std::unique_lock<std::mutex> lock(m_mutex);
    m_cv.wait(lock);
}

void LanWaitCondition::NotifyOne()
{
   
    m_cv.notify_one();
}

void LanWaitCondition::NotifyAll()
{
   
    m_cv.notify_all();
}

生产者与消费者模型及其测试代码

// C++11_ConditionWait.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 
#include 
#include "LanWaitCondition.h"
#include 
#include 
#include 

const int con_bufSize = 100000;    //所谓的时间换空间!!!  100M缓存
const int con_perMsgSize = 1024;
char buf[con_bufSize][con_perMsgSize] = {
    0 };
std::queue<int> queueForFree;   //当前空闲队列
LanWaitCondition lwcForFree;    //空闲队列条件变量
std::mutex mutexForFree;        //空闲队列锁
std::queue<int> queueForUse;    //已使用队列
LanWaitCondition lwcForUse;     //已使用队列条件变量
std::mutex mutexForUse

你可能感兴趣的:(C++11,自定义C++线程池)