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; } }
行万里路,不忘初心!