gpt4 book ai didi

c++ - 为什么boost::condition_variable可以使用pthread_cond_signal来仅唤醒一个线程

转载 作者:行者123 更新时间:2023-12-02 10:29:06 25 4
gpt4 key购买 nike

在boost::condition_variable的源代码中,方法condition_variable::notify_one()尝试使用pthread_cond_signal()来仅唤醒一个线程。
https://code.woboq.org/appleseed/include/boost/thread/pthread/condition_variable.hpp.html

inline void condition_variable::notify_one() BOOST_NOEXCEPT
{
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex);
#endif
BOOST_VERIFY(!pthread_cond_signal(&cond));
}
但是,POSIX说:

The pthread_cond_signal() function shall unblock at least one of the threads that are blocked on the specified condition variable cond (if any threads are blocked on cond).


那么为什么boost::condition_variable确保pthread_cond_signal只是唤醒一个线程?

最佳答案

So why boost::condition_variable make sure that the pthread_cond_signal just wake up one thread???


为什么?这个问题没有意义。问题是“是否”。而且没有(如您所见)。
您可以看到它在那里使用了pthread API来解除阻止 至少一个等待线程。
这只是与使用 notify_allpthread_cond_broadcast相反。
这种区别是有用的,因为它可以在唤醒所有服务员很浪费的情况下提高并发操作的效率。

Related: when using condition variables, you must always take spurious wake-up into account

关于c++ - 为什么boost::condition_variable可以使用pthread_cond_signal来仅唤醒一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63030760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com