我注意到当我对条件变量执行等待操作时,它会立即返回。结果是,当执行以下虚拟代码时,循环中使用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)
谢谢,
纪尧姆
答案 0 :(得分:2)
condition_variable::wait
可能会虚假地返回 。也就是说,没有得到通知。虚假返回的频率是实施质量的问题。
在我的机器上,我接受了你的代码,将其更改为使用std :: condition_variable(C ++ 11中的新增功能)并运行它。挂起时没有使用cpu。
这听起来就像你的平台上的boost实现(boost有不同的windows和pthreads实现),虚假地唤醒自己以确保它不会错过通知。
答案 1 :(得分:1)
由于程序中没有其他线程,因此线程库可以立即从pthread_cond_wait()返回,或者程序将永远休眠。