gpt4 book ai didi

c++ - 原子释放可以是 "overwritten"吗?

转载 作者:行者123 更新时间:2023-11-30 02:19:38 24 4
gpt4 key购买 nike

假设我有atomic<int> i;线程 A 使用 memory_order_release 执行原子存储/交换。接下来,线程 B 使用 memory_order_release 执行原子存储。线程 C 执行原子 fetch_add(0, memory_order_acquire);

线程 C 是否从线程 A 和 B 获取依赖项,还是仅从线程 B 获取依赖项?

最佳答案

B(我假设“下一个”意味着原子的修改顺序是A -> B -> C,因此通过[atomics.order]p11 C 的 RMW 必须读取 B 写入的值)。请参阅 [intro.races]p6 中的注释:

Except in the specified cases, reading a later value does not necessarily ensure visibility as described below. Such a requirement would sometimes interfere with efficient implementation.

fetch_add 的读取部分是一个获取操作,它从 store-release 中获取其值,因此 store release 通过 [atomics.order]p2 与 RMW 同步。 :

An atomic operation A that performs a release operation on an atomic object M synchronizes with an atomic operation B that performs an acquire operation on M and takes its value from any side effect in the release sequence headed by A.

但是,线程 B 执行的存储/释放不是 RMW 操作,因此不是以线程 A 的存储为首的释放序列的一部分(请参阅 [intro.races]p5 )。因此,线程 A 的存储不与 fetch_add 同步。

关于c++ - 原子释放可以是 "overwritten"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50573323/

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