我明白,在顺序一致性中,所有进程都必须按顺序进行处理。例如:
Process 1 Process 2
x = 1 z = 5
y = 2 p = 3所以,我们可以得到x=1,z=5,y=2,p=3或者z=5,p=3,x=1,y=2,但是重要的是p只能在z被执行的时候被执行,对吗?
那么因果一致性呢?我看不出有什么不同。任何草图,或者用JAVA或C编写的代码都会很棒。谢谢。
发布于 2013-06-05 09:09:33
在顺序一致性中,所有内存操作在所有节点看来都是以某种顺序出现的。
因此,在您的示例中,进程1、2和3都将以相同的顺序看到内存操作。(这4个操作有6个可能的顺序,但所有流程都会对该顺序达成一致。)
在因果一致性进程1、2和3中,都可以观察到这些写入以不同的顺序发生。有两条规则:
x并获得由不同的进程j写入的值,则所有线程都同意进程j对位置x的写入先于进程i对位置x的读取。由于在您的原始示例中没有读取操作,因此,例如,进程1可能认为写入是以x=1, y=2, z=5, p=3的顺序发生的,而进程2认为写入是以z=5, p=3, x=1, y=2的顺序发生的,而进程3认为它们是以z=5, x=1, p=3, y=2的顺序发生的。
paper that the Wikipedia page points to提供了一些更有趣的示例(包括读取)。
因果记忆本身似乎没有多大用处。在本文的后面,他们展示了如何实现某种类似于带有因果记忆(和助手进程)的屏障,但提到似乎没有任何方便的方法来实现关键部分。
所以他们最终做了弱一致性或释放一致性内存所做的事情,并添加了一个同步原语,这需要顺序一致。
https://stackoverflow.com/questions/16929389
复制相似问题