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?
答案 0 :(得分:5)
你不必弄乱volatile
。 volatile
与多线程完全无关。即使编译器没有优化东西到你提到的循环,你的CPU也可能进行相同的优化,而volatile
不会影响CPU。
wait
应包含必要的内存屏障指令,使其按预期运行。