据我所知,获取/释放语义充当顺序一致性和较弱的内存模型(或C ++称为“松弛”)所允许的无条件内存重新排序自由之间的中间地带。简而言之:
read
进行任何以程序顺序跟在其后的read
或write
操作的内存重新排序; write
进行任何以程序顺序在其前面的read
或write
操作进行内存重新排序。很酷。但是这些保证加在一起,对我来说似乎是连续的一致性。顺序一致性提供了什么却不能使获取/释放语义共同提供?你能举个例子吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
用硬件术语来说,acq / rel允许在一个线程内进行存储/重装,以便在其他线程全局可见之前,将存储缓冲区中的值转发给存储缓冲区。
seq_cst强制先清空存储缓冲区,然后seq-cst加载才能从同一线程重新加载seq-cst存储。
这是https://preshing.com/20120515/memory-reordering-caught-in-the-act/的区别-从acq_rel到seq_cst,需要在存储和重载之间添加完整的内存屏障(在x86上)。