条件变量
Condition variables
我注意到,当我对条件变量执行等待操作时,它会立即返回。结果是,当执行以下虚拟代码时,循环中使用了一个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()返回是非常明智的,否则程序将永远休眠。
相关文章:
- 基于模板值的条件变量
- 没有超时的C++条件变量
- 在条件变量中触发错误信号的频率是多少
- 使用不变量来确定二分搜索中的边界条件
- 在通知提升间处理条件变量时未按住锁会导致问题
- 通知条件变量后使用互斥锁
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 滥用条件变量
- 升压插值条件变量可以虚假唤醒吗?
- 根据模板类型有条件地删除变量
- 子线程中的条件变量等待停止主线程中的执行
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 条件变量基本示例
- 正在连接的等待条件变量的线程会发生什么情况?
- C++11如何在1个线程中使用条件变量处理2个线程安全队列
- 当线程处理不同的类时,应该在哪里声明条件变量、互斥对象
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- 条件变量:wait_for.gcc错误
- 如何"stop"正在等待条件变量的分离线程?
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取