同步模式互斥保护块
问题描述:
http://www.boost.org/doc/libs/1_58_0/doc/html/atomic/usage_examples.html同步模式互斥保护块
在“单例具有双检查锁定模式”的上述升压例子例如是用于_instance的第二负载的memory_order_consume和必要_instance的商店中的memory_order_release ?我认为scoped_lock已经获得并释放了语义,并且_instance的第一次加载具有同步模式memory_order_consume。
答
在此假设下,这里使用的boost
原语支持相同的功能作为他们std
同行,第二load
不需要memory_order_consume
,因为这是保证 基础上,mutex
的获取/释放语义与store/release
要同步,你说得对。
也许,使用memory_order_consume
是基于一个错误的假设,一个load/relaxed
可以跨越mutex/acquire
屏障, 飘了起来,但这不是每mutex
担保可能,因此memory_order_relaxed
是完全没有问题。
另一方面store/release
是绝对必要的,因为它与第一个load/consume
同步,这是不受mutex
保护。