gpt4 book ai didi

replication - 具有顺序和因果一致性的复制

转载 作者:行者123 更新时间:2023-12-02 03:26:00 26 4
gpt4 key购买 nike

有两个进程访问共享变量x,y和z。每个进程访问用于保存这些变量的存储的不同副本。 x,y和z的初始值是0。

流程1:

x = 1;
if (y == 0)
z++;

和过程2:
y = 1;
if (x == 0)
z++;

完成这两个语句后,在a)顺序和b)临时一致性模型中z的可能值是什么?

我知道,在顺序一致性中,进程是按程序指定的某些顺序执行的。我相信在上面的示例中,z的结果在顺序一致性模型中将为零,这是因为两个进程按照流程中指定的顺序同时执行。因此,都不执行任何if条件。但是我不确定。

对于临时的,在所有过程中相关的写入应该以相同的顺序进行。并发写入的顺序可以不同。
在我们的示例中,我无法弄清楚该规则的工作原理。

最佳答案

顺序一致的系统向您保证,其行为将始终与相同,并且涉及到所涉及的读写的某些顺序执行,并与每个处理器正在执行的程序中相对的读写顺序一致。它不能保证由不同处理器执行的两个操作将以什么顺序出现。

当然,您最终可能会得到:

P1: store(x, 1)
P2: store(y, 1)
P1: load(y) // 1
P2: load(x) // 1

并且两个处理器都不会增加z。但是,系统满足以下条件也是完全合理的:
P1: store(x, 1)
P1: load(y) // 0
P1: store(z, z+1)
P2: store(y, 1)
P2: load(x) // 1

最终将“z”设置为1。如果需要确定性的结果,则需要添加锁定。顺序一致的系统可以确保z永远不会为2:无法对写入进行重新排序,以使两个进程都加载0值并递增z而不破坏顺序一致性。

相反,因果一致的系统不能保证其行为始终与所涉及的读取和写入的单个顺序执行相同。除非这些处理因果相关,否则不同的处理器以不同的顺序查看其他人的写入是完全可以的。您可能会得到以下结果:
// P1's local history
P1: store(x, 1)
P1: load(y) // 0
P1: store(z, z+1)
P2: store(y, 1)

// P2's local history
P2: store(y, 1)
P2: load(x) // 0
P2: store(z, z+1)
P1: store(x, 1)

z的最终值为2。确保因果一致性的是第三个流程正在执行:
if (z == 2)
print(x, y)

永远不会输出0:
  • 如果P3加载/打印x和y,则加载必须在z加载之后发生
  • 如果z的负载的值为2,则它必须在P1和P2在本地历史记录中P1和P2的增量相同之后发生
  • P1的store(x,1)必须在其z增量之前出现;同样对于P2 / y

  • 通过传递性,包括打印语句的P3的任何本地历史记录都必须看到x和y的历史记录。

    关于replication - 具有顺序和因果一致性的复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280423/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com