条件变量

Condition variables

本文关键字:变量 条件      更新时间:2023-10-16

我注意到,当我对条件变量执行等待操作时,它会立即返回。结果是,当执行以下虚拟代码时,循环中使用了一个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;

}

我希望对cond.wait(lock)的调用将线程置于不消耗任何CPU的状态,但事实并非如此。

那么问题在哪里?以上代码来自boost文档。

(我使用的是boost 1.44)

谢谢,盖伊表示:

condition_variable::wait可能虚假地返回。也就是说,在没有通知的情况下。错误返回的频率是实现质量的问题。

在我的机器上,我拿了你的代码,把它改为使用std::condition_variable (c++ 11中新增),然后运行它。在没有使用cpu的情况下挂起。

这听起来像是boost实现,在您的平台上(boost对windows和pthreads有不同的实现),虚假地唤醒自己以确保它不会错过通知。

由于程序中没有其他线程,因此线程库立即从pthread_cond_wait()返回是非常明智的,否则程序将永远休眠。