首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >因果一致性与顺序一致性有何不同?

因果一致性与顺序一致性有何不同?
EN

Stack Overflow用户
提问于 2013-06-05 07:59:31
回答 1查看 6.4K关注 0票数 9

我明白,在顺序一致性中,所有进程都必须按顺序进行处理。例如:

代码语言:javascript
复制
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编写的代码都会很棒。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-05 09:09:33

在顺序一致性中,所有内存操作在所有节点看来都是以某种顺序出现的。

因此,在您的示例中,进程1、2和3都将以相同的顺序看到内存操作。(这4个操作有6个可能的顺序,但所有流程都会对该顺序达成一致。)

在因果一致性进程1、2和3中,都可以观察到这些写入以不同的顺序发生。有两条规则:

  1. 每个人都同意进程i的写入顺序与进程i的写入顺序相同。
  2. 如果任何进程i读取位置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提供了一些更有趣的示例(包括读取)。

因果记忆本身似乎没有多大用处。在本文的后面,他们展示了如何实现某种类似于带有因果记忆(和助手进程)的屏障,但提到似乎没有任何方便的方法来实现关键部分。

所以他们最终做了弱一致性或释放一致性内存所做的事情,并添加了一个同步原语,这需要顺序一致。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16929389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档