http://www.boost.org/doc/libs/1_58_0/doc/html/atomic/usage_examples.html
在上面提升示例的“具有双重检查锁定模式的单例”中,是_instance的第二次加载的memory_order_consume和_instance的store的memory_order_release是否必要?我认为scoped_lock已经获取并释放了语义,并且_instance的第一次加载具有同步模式memory_order_consume。
答案 0 :(得分:0)
假设此处使用的boost
基元支持与其std
对应项相同的功能,则第二个load
不需要memory_order_consume
,因为它是有保证的
要根据store/release
的获取/发布语义与mutex
同步,你是对的。
或许,memory_order_consume
的使用是基于load/relaxed
可能在mutex/acquire
障碍上浮动的错误假设,
但是根据mutex
保证这是不可能的,因此memory_order_relaxed
完全没问题。
另一方面,store/release
是绝对必要的,因为它与不受load/consume
保护的第一个mutex
同步。