boost条件需要volatile变量

Ha1*_*wed 1 c++ boost-thread

HY,

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

boost::mutex::scoped_lock lk(monitor);
while (buffered == 0) {
    buffer_not_empty.wait(lk);
}
Run Code Online (Sandbox Code Playgroud)

如果int变量buffered应该是volatile ,我就会徘徊.我会说,为了防止像这样的优化,它应该在编译时:

boost::mutex::scoped_lock lk(monitor);
while (true) {
    buffer_not_empty.wait(lk);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Bil*_*eal 5

你不必惹麻烦volatile.volatile绝对与多线程无关.即使编译器没有优化东西到你提到的循环,你的CPU可能会进行相同的优化,并且volatile不会影响CPU.

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