3

http://www.boost.org/doc/libs/1_58_0/doc/html/atomic/usage_examples.html

在上述boost示例的“具有双重检查锁定模式的单例”示例中,_instance的第二次加载的memory_order_consume和_instance的存储的memory_order_release是否必要?我认为 scoped_lock 已经具有获取和释放语义,并且 _instance 的第一次加载具有同步模式 memory_order_consume。

4

1 回答 1

0

假设boost这里使用的原语支持与其对应的功能相同的功能std,第二个load不需要,memory_order_consume因为它保证与store/release基于 的获取/释放语义同步mutex,你是对的。

也许,使用memory_order_consume是基于一个错误的假设,即 aload/relaxed可能会飘过障碍,但根据保证mutex/acquire这是不可能的,因此完全没问题。 mutexmemory_order_relaxed

store/release另一方面是绝对必要的,因为它与不受保护的第一个load/consume同步mutex

于 2017-08-23T09:27:01.000 回答