原子读-修改-写操作的内存排序
在 C 中,原子读-修改-写 (RMW) 操作,例如 x .exchange() 对其他加载和存储强制执行特定的排序保证。问题是是否考虑这些操作:
标准视角
按照C标准, RMW 操作被视为单一操作。这是由它们的单数名称和相关措辞暗示的。
ARM64 实现
在 ARM64 中,RMW 操作被实现为一系列加载、原子交换和存储指令。虽然理论上此实现允许存储指令在原子交换之前变得可见,但这不会影响标准的内存排序保证。
内存同步
C 中的内存同步主要基于释放和获取操作之间的同步关系。在提供的代码示例中:
同步分析
由于没有其他操作可以同步,因此会发生以下顺序:
可能的输出
因此,代码确实可以输出 0, 1。标准的观点意味着 RMW 操作是单个操作,没有额外的保证,允许此输出。
以上是C 原子读-修改-写操作是具有获取-释放语义的单个操作,还是加载和存储的序列?的详细内容。更多信息请关注PHP中文网其他相关文章!