HY,
我已经开始使用C++中的线程(增强线程),
并且我发现自己处于以下情况:
boost::mutex::scoped_lock lk(monitor);
while (buffered == 0) {
buffer_not_empty.wait(lk);
}
而且我在徘徊如果int变量
buffered
应该是可变的。我想说,它应该在编译时阻止这样的优化:
boost::mutex::scoped_lock lk(monitor);
while (true) {
buffer_not_empty.wait(lk);
}
但是由于这是boost文档中的一个示例,因此我可能会遗漏一些东西...
锁/互斥锁/条件是否足以阻止此类优化?像在Java中一样?
最佳答案
您无需弄混volatile
。 volatile
与多线程绝对无关。即使编译器没有以某种方式优化循环中的内容,您的CPU也会进行相同的优化,并且volatile
不会影响CPU。wait
应该包含必要的内存屏障指令,以使其按预期运行。
关于c++ - 升压条件需要波动变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7388388/