
复制和一致性
|
199
图 11-5 展示了 write(x,1) 和 write(x,2) 是如何变得对 P
3
和 P
4
可见的。即使用挂
钟(wall-clock
译注 1
)概念来说 1 是在 2
之前
写的,但它也可以排在 2 之后。与此同时,
当 P
3
已经读取值 1 时,P
4
仍然可以读取值 2。但是,只要它们对于不同的读取者是一
致的,那么 1 → 2 和 2 → 1 这两个顺序
都
是有效的。关键在于 P
3
和 P
4
的观测值
顺序相
同
:首先是 2,然后是 1[TANENBAUM14]。
图
11-5
:顺序一致性中的排序
读到过时值(stale read)可以用副本差异来解释,例如:即使写入以相同的顺序传播到
不同的副本,它们也可能在不同的时间到达。
顺序一致性与可线性化的主要区别在于没有全局强制的时间界限。在可线性化中,一个
操作必须在其挂钟时间范围内变得有效。当写入操作 W
1
完成时,它的结果必须已经被
应用,并且每个读取者应该能够看到
至少
与 W
1
所写入的值一样新的值。类似地,在一
个读操作 R
1
返回之后,在它之后执行的任何读操作都应该返回 R
1
已经看到的值或更晚
的值(当然,这也必须遵循同样的规则)。
顺序一致性放宽了这一要求:操作的结果可以在操作完成
后
才变得可见,只要从单个参
与者的角度来看顺序是一致的。同一来源的写操作程序不能互相“跳过”:它们的程序
顺序(相对于自己的执行进程)必须保持不变。另一个限制是操作出现的顺序必须对
所
有
读取者一致。
与可线性化相似,现代 CPU 在默认情况下不保证顺序一致性,而且,由于处理器可以 ...