boost条件需要volatile变量

时间:2011-09-12 13:10:32

标签: c++ boost-thread

HY,

我已经开始使用C ++中的线程(boost threads), 我在以下情况下找到了自己:

boost::mutex::scoped_lock lk(monitor);
while (buffered == 0) {
    buffer_not_empty.wait(lk);
}

如果int变量buffered应该是volatile,我就会徘徊。 我想在编译时应该阻止像这样的优化:

boost::mutex::scoped_lock lk(monitor);
while (true) {
    buffer_not_empty.wait(lk);
}

但是因为这是来自boost文档的一个例子,我可能会遗漏一些东西......

是一个锁/互斥/条件,足以阻止这种优化?喜欢在java?

1 个答案:

答案 0 :(得分:5)

你不必弄乱volatilevolatile与多线程完全无关。即使编译器没有优化东西到你提到的循环,你的CPU也可能进行相同的优化,而volatile不会影响CPU。

wait应包含必要的内存屏障指令,使其按预期运行。