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

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

目前,我正在使用 C++11 中的 std::thread 实现一个多线程项目。我使用 std::condition_variable 来同步线程。具体来说,一个消费者函数调用 std::condition_variable 的成员函数 wait() 等待来自全局任务队列的任务,另一个生产者函数生成任务并将其放入队列。但是我不知道std::condition_variablenotify_all()notify_one()成员函数的区别。我应该在生产者函数中使用哪个函数?谢谢!

最佳答案

如果条件变量上阻塞了十个线程,例如,notify_one() 将仅解除阻塞一个线程,而 notify_all() 将全部解除阻塞。在您的情况下,您需要使用 notify_one() 这样您就不会唤醒没有任何工作等待它们的线程。

关于c++ - std::condition_variable 的 notify_all() 和 notify_one() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9015748/

相关文章:

c++ - 创建 std::function 返回具有函数成员值的变量。分段故障

C++智能指针混淆

c# - 有没有办法暂停所有 Threading.Timer 计时器?

c++ - 错误 : ‘fileno’ was not declared in this scope

c++ - 在 C++(或 R)中翻转行尾

c++ - 在 C++ 中声明变量名称的问题

java - 多线程延迟的原因

java - 了解锁类与同步

c++ - 为什么需要在 VS 中为 packaged_task 复制构造函数

c++ - std::bind():以右值引用作为参数绑定(bind) lambda