std::condition_variable 和 std::condition_variable_any
前者仅限于和std::mutex合作,后者可以与符合成为互斥元的最低标准的任何东西一起工作

condition_variable里面有notify()和wait()函数
notify()用于通知等待的函数启动,
wait()函数用法

condition_variable里面有notify()和wait()函数
notify()用于通知等待的函数启动,
wait()函数用法
std::unique_lock<std::mutex> lk(mutex);
condition_variable data_cond;
data_cond.wait(lk, []{return !data_queue.empty();});

wait()会检查条件(第二参数,如果条件满足时返回返回true,不满足(返回false)时解锁互斥量,继续阻塞)。

例子:

例子:

std::mutex mutex;
std::queue<data_chunk> data_queue;
condition_variable data_cond;

void data_pre_thead()
{
    while(more_data_to_pre())
    {
        data_chunk const data = prepare_data();
        std::lock_guard<std::mutex> lk(mutex);
        data_queue.push(data);
        data_cond.notify_one();   //通知等待中的线程
    }
}

void data_processing_thread()
{
    while(true)
    {
        std::unique_lock<std::mutex> lk(mutex);
        data_cond.wait(lk, []{return !data_queue.empty();});  //不满足时,解锁互斥量,继续阻塞
        data_chunk data = data_queue.front();
        data_queue.pop();
        lk.unlock();
        process(data);
        if(is_last_chunk(data))
        break;
    }
}

  

posted on 2021-04-06 14:23  望月又一  阅读(158)  评论(0编辑  收藏  举报