顺序一致性和获取/发布语义有什么区别?

What is the difference between sequential consistency and acquire/release semantics?

本文关键字:语义 什么 区别 一致性 获取 布语义 顺序      更新时间:2023-10-16

据我所知,获取/释放语义充当顺序一致性和弱记忆模型(或"放松",如C++所说的"(所允许的无条件记忆重新排序自由之间的中间地带。简而言之:

  • 获取语义可防止read的内存重新排序,并按程序顺序执行任何readwrite操作;
  • 发布语义可防止write的内存重新排序,并按程序顺序排列在之前的任何readwrite操作。

凉。但这些保证加在一起,对我来说看起来像是顺序一致性。顺序一致性提供了什么,而获取/释放语义一起不提供?你能举个例子吗?

在硬件方面,acq/rel 允许在一个线程内存储/重新加载,以便在其他线程全局可见之前将存储缓冲区中的值

存储转发。seq_cst强制存储缓冲区耗尽,然后 seq-cst 加载可以从同一线程重新加载 seq-cst 存储。

这是 https://preshing.com/20120515/memory-reordering-caught-in-the-act/的区别 - 在存储和重新加载之间添加完整的内存屏障是(在 x86 上(从acq_rel到seq_cst所需要的。

额外的是单个总修改顺序:https://en.cppreference.com/w/cpp/atomic/memory_order#Sequentially-consistent_ordering