C++实现生产者和消费者模型

#include 
#include
#include
#include
#include

using namespace std;

//任务队列
queue<int>products ;
mutex m ;
condition_variable cond ;
bool notify = false ;
bool done = false ;

void producer() ;
void consumer(){
    
    while(!done){
        
        //上锁保护共享资源,unique_lock一次实现上锁和解锁
        unique_lock<mutex>lk(m);
        //等待生产者者通知有资源
        while(!notify){
            
            cond.wait(lk);
        }

        //要是队列不为空的话
        while(!products.empty()){

            cout<<"consumer..."<<products.front()<<endl;
            products.pop();
            //通知生产者仓库容量不足,生产产品
            notify = false ;
            cond.notify_one();
        }
    }
}

void producer(){
    
    int i ;
    for(i=0;i<10;i++){
		//主动让出cpu,不参与cpu 的本次调度,让其他线程使用,等一秒后再参与调度
		//      this_thread::sleep_for(chrono::seconds(1));
        unique_lock<mutex>lk(m);
        cout<<"producer..."<<i<<endl;
        //如果仓库中有产品,就等待消费者消费完后在生产
        while(notify||!products.empty()){
            cond.wait(lk);
        }
        //当前仓库里面没有东西了,就将产品装入仓库
        products.push(i);
        //设置有产品的通知
        notify = true ;
        //通知消费者可以取产品了
        cond.notify_one();
        
    }   
    

    //通知消费者端不生产了
    done = true ;
    cond.notify_one();
}   

int main()
{

    thread t1(producer);
    thread t2(consumer);
    t1.join();
    t2.join();
    return 0;
}

你可能感兴趣的:(c++学习)