std :: condition_variable的notify_all()和notify_one()有什么区别?

时间:2012-01-26 08:58:12

标签: c++ multithreading c++11 condition-variable

目前,我正在C ++ 11中使用std::thread实现一个多线程项目。我使用std::condition_variable来同步线程。详细地说,一个消费者函数调用wait()的{​​{1}}成员函数来等待来自全局任务队列的任务,另一个生成器函数生成并将任务放入队列。但我不知道std::condition_variable的{​​{1}}和notify_all()成员函数之间的区别。我应该在生产者函数中使用哪个函数?谢谢!

1 个答案:

答案 0 :(得分:30)

例如,如果条件变量上有十个线程被阻止,notify_one()将仅取消阻止一个线程,而notify_all()将解锁所有线程。在您的情况下,您将需要使用notify_one(),因此您不会唤醒没有任何工作等待它们的线程。