说我有atomic<int> i;
线程 A 使用 memory_order_release 执行原子存储/交换。接下来,线程 B 使用 memory_order_release 执行原子存储。线程 C 执行原子 fetch_add(0, memory_order_acquire);
线程C是否从线程获取依赖A and B or 仅线程B?
Only B
(我假设“下一个”是指原子的修改顺序是A -> B -> C
以便通过[原子序]p11 https://wg21.link/atomics.order#11 C
的RMW必须读取的值B
写道)。请参阅中的注释[种族简介]p6 https://wg21.link/intro.races#6.note-1:
除指定情况外,读取稍后的值不会
必须确保可见性,如下所述。这样的要求
有时会干扰有效的实施。
已读部分fetch_add
是一个获取操作,从存储释放中获取其值,因此存储释放通过以下方式与 RMW 同步[原子序]p2 https://wg21.link/atomics.order#2:
原子操作A,对原子执行释放操作
对象 M 与执行原子操作 B 同步
获取 M 上的操作并从 M 中的任何副作用中获取其值
以 A 为首的释放序列。
然而,线程 B 执行的存储/释放不是 RMW 操作,因此不是以线程 A 的存储为首的释放序列的一部分(请参阅[种族简介]p5 https://wg21.link/intro.races#5)。因此,线程 A 的存储不与fetch_add
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)