condition

#include <deque>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;

deque<int> queue;
mutex mtx;
condition_variable cond;

void dequeue()
{
    //1.必须与mutex一起使用
    //2.mutex已上锁的时候才能调用wait()
    //3.把bool条件判断放到while中

    unique_lock<mutex> lock(mtx);
    while(queue.empty())
    {
        cond.wait(lock);//会解锁,并等待
        //wait执行完毕自动重新加锁
    }    
    queue.pop_front();
}

void enqueue()
{
    unique_lock<mutex> lock(mtx);
    queue.push_back(1);
    cond.notify_one();
}

//int main()
//{
//    thread th1(dequeue);
//    thread th2(enqueue);
//
//    th1.join();
//    th2.join();
//    return 0;
//}

 

posted @ 2020-12-26 18:14  zzyoucan  阅读(186)  评论(0编辑  收藏  举报