严格一致性与顺序性

时间:2014-12-04 23:02:22

标签: synchronization sequential consistency eventual-consistency

我不明白这些。假设我在内存地址x处有一个值10。

如果我们有

thread1:
Read(x)
x+=5
Write(x)

然后:

thread2:
Read(x)
x+=2
Write(x)

我没有得到有效的顺序或严格的一致性。

就像这里,这是一个有效的严格一致的操作结果吗?

T1: R(x), found 10                W(x), x is now 15
T2                 R(x),found 10                     W(x), x is now 12

这似乎毫无用处。 x有错误的值......它不是附加的。也就是说,每个处理器执行的访问按顺序保存,每个人都看到相同的顺序。这些是严格一致性的标准,对吗?结果被压垮并不重要。

对于顺序一致性......我没有区分它和严格。

1 个答案:

答案 0 :(得分:1)

部分解决您的问题:

顺序一致性,只需要内存位置按照发布顺序查看操作。从主线程(时钟)的角度来看,发布这些操作的方式可能并不理想。

但是,它们仍然是顺序一致的。我自己的解释是,在发布后对内存位置的操作进行重新排序将违反一致性要求。就好像,在发行时已经获得了一张全球票,执行引擎就是为了订票。

“问题”,如果我们可以调用它,就是指令问题本身 - 因为T1和T2可以任意顺序发出它们。如果应用程序对这种一致性水平感到满意,那么应该很乐意使用它。

假设情况:让我们希望在完成所有线程之后,多个线程和读者更新一些内存位置必须读取最后写入的值 - 您只需要按照发布的顺序赢取最后一个。当然,这是一个狭隘的情况,但在某些情况下是理想的情况。