条件变量

时间:2011-04-19 05:53:36

标签: c++ multithreading boost boost-thread condition-variable

我注意到当我对条件变量执行等待操作时,它会立即返回。结果是,当执行以下虚拟代码时,循环中使用100%的一个CPU:

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)

谢谢,

纪尧姆

2 个答案:

答案 0 :(得分:2)

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

在我的机器上,我接受了你的代码,将其更改为使用std :: condition_variable(C ++ 11中的新增功能)并运行它。挂起时没有使用cpu。

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

答案 1 :(得分:1)

由于程序中没有其他线程,因此线程库可以立即从pthread_cond_wait()返回,或者程序将永远休眠。