4

我注意到,当我对条件变量执行等待操作时,它会立即返回。结果是,当执行以下虚拟代码时,一个 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 文档中获取了上面的代码。

(我正在使用提升 1.44)

谢谢,

纪尧姆

4

2 回答 2

3

Acondition_variable::wait可能会虚假返回。也就是说,没有被通知。它虚假返回的频率是实施质量的问题。

在我的机器上,我获取了您的代码,将其更改为使用 std::condition_variable(C++11 中的新功能),然后运行它。它挂起没有使用cpu。

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

于 2011-04-19T14:26:09.147 回答
1

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

于 2011-04-19T12:27:33.500 回答