同步模式互斥保护块

问题描述:

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保护。