松弛原子规则的(轻微)区别是什么?

问题描述 投票:1回答:2

在看到Herb Sutters关于[[“原子武器”的出色talk]之后,我对Relaxed Atomics示例有些困惑。[我认为

C ++内存模型

中的atomic(SC-DRF =顺序一致,无数据竞争)在加载/读取时进行了“获取”。我知道,对于负载[和商店],默认值为std::memory_order_seq_cst,因此两者相同:

myatomic.load(); // (1) myatomic.load(std::memory_order_seq_cst); // (2)

到目前为止,到目前为止,还没有轻松原子学的内容(在听完演讲后,我将永远不会使用轻松原子学的东西。永远。但是,当有人问我时,我可能不得不解释一下……)。

但是为什么使用时它是“松弛”的语义

myatomic.load(std::memory_order_acquire); // (3)

由于

加载

正在获取未释放,为什么这与(1)(2)不同? 实际上在这里放松了什么?]我唯一能想到的是我误解了

load

表示acquire。并且,如果这是真的,并且默认的seq_cst表示两者,那不是意味着整个栅栏-没有什么可以传递该指令,也不能传递该指令?我必须对该部分有误解。[并且对称地表示

store

release]。[在看到Herb Sutters关于“原子武器”的精彩演讲之后,我对“轻松原子”的例子有些困惑。我认为C ++内存模型中的一个原子(SC-DRF =顺序...
c++11 atomic memory-model memory-fences relaxed-atomics
2个回答
2
投票
由于存在myatomic.load(std::memory_order_acquire);,因此将std::memory_order_relaxed称为“松弛原子”负载可能有点令人困惑。>

您应该正确注意,顺序一致的负载是获取负载,但它还有一个附加要求:对于所有seq_cst操作,顺序一致的负载也是总全局顺序的一部分。

当您处理多个原子变量时,它就起作用了:两个原子的单独修改顺序可能以不同的相对于不同线程的相对顺序出现,除非施加顺序一致性。


0
投票
如果是真的,并且默认的seq_cst表示两者,那不是指的是完整的篱笆
© www.soinside.com 2019 - 2024. All rights reserved.