条件变量

| 我注意到,当我对条件变量执行等待操作时,它立即返回。结果是,在执行以下伪代码时,循环中使用了一个CPU的100%:
int main(void) {

boost::condition_variable cond;
boost::mutex mut;
bool data_ready = false;

boost::unique_lock<boost::mutex> lock(mut);
while (!data_ready) {
    cond.wait(lock);
}


return 1;
} 我希望对ѭ1的调用会使线程处于不消耗任何CPU的状态,但事实并非如此。 那么问题出在哪里呢?我从boost文档中获取了上面的代码。 (我正在使用Boost 1.44) 谢谢, 纪尧姆
已邀请:
condition_variable::wait
可能会虚假地返回。也就是说,无需通知。它虚假地返回的频率取决于实现的质量。 在我的机器上,我获取了您的代码,将其更改为使用std :: condition_variable(C ++ 11中的新增功能),然后运行它。挂起时没有使用任何CPU。 听起来像您平台上的boost实现(boost具有针对Windows和pthread的不同实现),虚假地唤醒自己以尝试确保它不会丢失通知。
由于程序中没有其他线程,因此线程库立即从pthread_cond_wait()返回非常明智,否则您的程序将永远休眠。

要回复问题请先登录注册