【发布时间】:2011-09-12 13:10:31
【问题描述】:
喂,
我已经开始使用 C++ 中的线程(增强线程), 我发现自己处于以下情况:
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中一样?
【问题讨论】:
-
monitor锁保护变量。够了。 -
这意味着事情就像在java中一样,任何锁都会保护变量
-
确实,任何锁都会保护在该锁下一致访问的所有变量。 C++11 还将通过原子类型为您提供无锁变量,但 AFAIR boost 没有提供它们,尽管它实际上在 details 命名空间中至少为某些类型提供了它们。
标签: c++ boost-thread