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中一样?

最佳答案

您无需弄混volatilevolatile与多线程绝对无关。即使编译器没有以某种方式优化循环中的内容,您的CPU也会进行相同的优化,并且volatile不会影响CPU。
wait应该包含必要的内存屏障指令,以使其按预期运行。

关于c++ - 升压条件需要波动变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7388388/

10-13 07:05