大家好,我想问一下分布式系统中的逻辑时钟。 Lamport算法定义当事件正在进程Pi发送消息时,并且在进程Pj事件b中接收到该消息,则可以定义事件a发生在b之前。假设在进程Pj收到事件b的消息之前,事件c发生在Pj上(因此c发生在b之前)并发送消息Process Pi,然后Process Pi在事件a之后的事件d收到消息,然后我们有事件c ,以及a,发生在d之前。
我的问题是,如何定义事件a(Process Pi上发生的第一个事件)和事件c(Process Pj上发生的第一个事件)之间的关系?如何让进程Pi和Pj都同意事件a和c的顺序?
答案 0 :(得分:3)
答案很简单。基于Lamport算法,您无法定义事件a和c之间的任何关系。我们所知道的所有事情都是:
a - > b和c - > d和a - > d和c - > B'/ P>
但你不能得出a - > c或c - >一个 就这样。
答案 1 :(得分:0)
重要的是,流程与事件发生的顺序一致。 为了同步逻辑时钟,Lamport 定义了一种称为先前发生的关系。表达式 a -> b 读作“a 出现在 b 之前”。这种发生关系可以在两种情况下看到:
如果'a'和'b'是同一个进程的事件,并且'a'出现在'b'之前,那么 a -> b 为真。
如果'a'是进程发送消息的事件,'b'是进程发送消息的事件 另一个进程收到消息,则 a-> b 也为真。
每条消息都有发送者的发送时间。所以接收机修改时间,以防它的时间小于发射机的时间。因此该算法同步接收器的时钟。 发送到另一个进程的每条消息都将包含发送消息的时间单位,因此会检查时钟。