gpt4 book ai didi

c++ - 宽松的原子规则有什么(轻微)差异?

转载 作者:行者123 更新时间:2023-12-02 04:41:43 25 4
gpt4 key购买 nike

在看到赫伯·萨特斯出色之后talk关于“原子武器”我对轻松原子示例有点困惑。

我认为C++内存模型中的原子(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)

既然load获取并且不是释放,为什么这与(1)不同>(2)这里实际上放松了什么?

我唯一能想到的是我误解了加载意味着获取。如果这是真的,并且默认的 seq_cst 意味着两者,那么这是否意味着一个完整的栅栏——没有任何东西可以向上或向下传递该指令?我肯定误解了那部分。

[并且对称地存储发布]。

最佳答案

调用 myatomic.load(std::memory_order_acquire); 可能会有点困惑“宽松原子”负载,因为有 std::memory_order_relaxed 。有些人描述任何弱于seq_cst的顺序“放松”。

您注意到顺序一致加载是获取加载是正确的,但它有一个额外的要求:顺序一致加载也是所有 seq_cst 操作的总全局顺序的一部分。

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

关于c++ - 宽松的原子规则有什么(轻微)差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com