【发布时间】:2020-07-22 09:10:53
【问题描述】:
在 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 说:
pthread_cond_signal() 函数应至少解除阻塞在指定条件变量 cond 上阻塞的线程之一(如果任何线程在 cond 上阻塞)。
那么为什么 boost::condition_variable 确保 pthread_cond_signal 只唤醒一个线程???
【问题讨论】: