请任何人澄清“完全异步协议协议”中的第 3 步(见下文):
过程 P:初始值 xp。
- 步骤0:设置
r := 1。 - 第 1 步:将消息发送
(1, r, xp)到所有进程。 - 第 2 步:等到收到
N - t, 类型(1, r, x)的消息。如果多个N/2消息具有相同的值v,则将消息发送(2, r, v, D)到所有进程。否则将消息发送(2, r, ?)到所有进程。 - 第 3 步:等待
N - t类型的消息(2, r)到达。- (a) 如果有一个 D 消息
(2, r, v, D),则设置xp := v。 - (b) 如果有多个
tD 消息,则决定v。 - (c) 其他集合
xp = 1或0每个集合的概率为 1/2。
- (a) 如果有一个 D 消息
- 第 4 步:设置
r := r + 1并转到第 1 步。
我对这个协议的理解如下。
在第一步中,每个节点都会通知其他每个节点其状态。
在第二步,每个节点决定它是否“看到”了足够的信息来确定值,换句话说,它等待多数。如果多数具有相同的值,它会开始广播此信息,例如“我看到多数认为v”。否则,它会发送消息,表明它没有下定决心。
最后,在第三步中,我们检查是否有多个t“决定性”消息(如果t节点的消息无法传递,则至少会有一个“决定性”消息)。但我不明白为什么我们xp := v只在收到一条D 消息时才设置。接收两个 D 消息属于 3c,在这种情况下,我们将为 v 分配随机值。为什么?
为什么我们不能像这样描述第三步:
- (a) 如果 D 消息为零,则以 1/2 的概率设置
xp = 1或0每个。 - (b) 如果有多个
tD 消息,则决定v。 - (c) 其他设置
xp := v。