目录

在并行执行的多个线程中,将线程间的操作设为原子操作会导致效率下降,因为原子操作要求所有线程都同步感知到变量的变化。为了加速多线程程序,可以削弱原子操作的同步条件,即引入不同的一致性模型。

它要求任何一次读操作都能读到某个数据的最近一次写的数据,并且所有线程的操作顺序与全局时钟下的顺序是一致的。

三个线程严格按照A→B→C的顺序来执行对于原子数据v的操作。

顺序一致性

并无任何先后保障,即只要 T2 的 x.store(2) 发生在 x.store(3) 之前即可。

因果一致性模型(Causal Consistency)

因果一致性:它的要求进一步降低,只需要有因果关系的操作顺序得到保障,而非因果关系的操作
顺序则不做要求。

上面给出的三种例子都是属于因果一致的,因为整个过程中,只有 c 对 a 和 b 产生依赖,而 x 和

弱一致性模型(Weak Consistency)

弱一致性模型中,对变量v的操作可以按照一定条件重新排序。

它只保障某个操作在未来的某个时间节点上会被观察到,但并未要求被观察到的时间。

如果我们假设 x 的初始值为 0,则 T2 中四次 x.read() 结果可能但不限于以下

情况:

3 4 4 4 // x 的写操作被很快观察到

0 3 3 4 // x 的写操作被观察到的时间存在一定延迟

0 0 0 4 // 最后一次读操作读到了 x 的最终值,但此前的变化并未观察到

0 0 0 0 // 在当前时间段内 x 的写操作均未被观察到,但未来某个时间点上一定能观察到 x 为 4 的情况