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;
}
}
行万里路,不忘初心!
浙公网安备 33010602011771号