我正在阅读Lamport关于时钟和状态机的论文,有一点我不明白。 Lamport声明:"当一个进程知道所有其他进程发出的时间戳小于或等于T的所有命令时,进程可以执行命令时间戳T.精确的算法是直截了当的,我们不会打扰描述它。"
算法很简单,但实际上我没有...过程如何知道没有更多的传入消息,其时间戳小于或等于要处理的消息的时间戳?
它可能会在收到消息时广播ACK的所有进程解决...因此,由于消息是有序的,所以在收到ACK后,进程知道没有时间戳较低的传入消息......但是这样看起来不像"一个简单的算法"。
希望我足够清楚。
答案 0 :(得分:2)
该进程知道没有其他命令,因为/当它从每个其他进程收到时间戳> = T的命令时。
假设我们有一个流程P1从流程P2收到一个时间戳为T2&gt; = T的命令。收到此命令后,流程P1立即获知所有所发出的P2的命令< strong>之前或并发,其命令时间戳为T.
实际上P1可以学习所有中间命令,即使它们尚未被接收(例如,P2可以为每个发送的命令分配序号,因此P1会注意到数字的差距)。然后P1可以选择等待丢失的命令,或者如果它们在传输过程中丢失则重新请求它们。
因此,为了执行用T加上时间戳的命令,进程P1必须等待,直到它从每个其他进程接收到带有时间戳&gt; = T的单个命令 - 然后它就可以了等待(或重新请求)所有缺少的中间命令并执行命令T.