【发布时间】:2015-10-31 20:38:38
【问题描述】:
我的问题不是关于双重检查锁定,而是类似的。
在下面的代码中,编译器是否可以优化出内部的if语句?
X 通过同一翻译单元中的另一个线程设置。
这个想法是保证如果调用了fire2,就不能调用fire1
【问题讨论】:
-
无法保证 bool 是原子的,您需要使用 C++11 中的 std::atomic 或旧平台特定类型才能接近您想要的。
-
如果我在互斥锁中,为什么需要原子?
-
你的第一个
if(x)在锁外 -
@Flexo,如果
x从未设置为 true(创建时除外),那么第一个 if 在外面并不重要。第一个if只是为了避免锁定而进行的优化。类似的模式通常用于单例。 -
@Flexo 如果变量受
mutex保护,您也不需要将其设为atomic。阅读std::mutex 文档。
标签: c++ optimization compiler-construction