服从因果关系意味着如果事情A导致另一件事B,并且如果您观察到B发生了,那么您也会观察到A发生了。考虑以下代码:
x = 0
y = 0
thread 1        thread 2
  x = 10          r1 = y   // #1
  y = 25          r2 = x   // #2
假设所有的读取和写入都是单独正确的(即在指令级别是原子的,没有撕裂,例如通过在 C++ 中使用宽松的原子),考虑线程 2 在点 2 对世界的看法#1。
如果r1为零,那么我们一无所知。线程 1 的执行可以在任何地方;它可能尚未开始,或者可能已经完成,但更改尚不可见。
然而,如果r1是 25,那么根据因果关系我们知道它r2 必须读为 10,因为唯一r1能读到 25 的方法是线程 1 已经执行了这两个语句,而 x86 的强内存排序保证了之前的效果(因果前面)商店是可见的。
请注意,这不是所有硬件的通用功能。在流行的当代内存模型(如 C++11、C11、Java 和 Go 的模型)中,我们会说在上面的操作中,存储y = 25有“释放排序”,加载r1 = y有“获取排序”,而这两个操作“同步”。