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?
你不必惹麻烦volatile.volatile绝对与多线程无关.即使编译器没有优化东西到你提到的循环,你的CPU可能会进行相同的优化,并且volatile不会影响CPU.
wait 应包含必要的内存屏障指令,使其按预期运行.
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |