goo*_*ing 6 c java algorithm concurrency memory-model
我知道在顺序一致性中,所有进程都必须按顺序处理.例如:
Process 1 Process 2
x = 1 z = 5
y = 2 p = 3
Run Code Online (Sandbox Code Playgroud)
因此,我们可以得到x = 1,z = 5,y = 2,p = 3或z = 5,p = 3,x = 1,y = 2.但重要的是p只能在z执行后执行等,对吗?
因果一致性怎么样?我没有看到任何差异.任何草图,或JAVA或C中的代码都会很棒.谢谢.
在顺序一致性方面,所有内存操作对所有节点似乎都是以某种顺序出现的。
因此,在您的示例中,进程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。
Wikipedia页面指向的论文提供了一些更有趣的示例(涉及阅读)。
因果记忆本身似乎不是很有用。在本文的后面,他们展示了如何使用因果记忆(和辅助过程)来实现某种类似于屏障的方法,但是提到了似乎没有任何便捷的方法来实现关键部分。
因此,他们最终会执行弱一致性或释放一致性内存的操作,并添加需要顺序一致的同步原语。