关于分布式逻辑时钟,Lamport算法

时间:2011-10-15 20:25:10

标签: synchronization logic clock distributed-system

大家好,我想问一下分布式系统中的逻辑时钟。 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的顺序?

Lamport算法:http://en.wikipedia.org/wiki/Lamport_timestamps

2 个答案:

答案 0 :(得分:3)

答案很简单。基于Lamport算法,您无法定义事件a和c之间的任何关系。我们所知道的所有事情都是:

a - > b和c - > d和a - > d和c - > B'/ P>

但你不能得出a - > c或c - >一个 就这样。

答案 1 :(得分:0)

重要的是,流程与事件发生的顺序一致。 为了同步逻辑时钟,Lamport 定义了一种称为先前发生的关系。表达式 a -> b 读作“a 出现在 b 之前”。这种发生关系可以在两种情况下看到:

  1. 如果'a'和'b'是同一个进程的事件,并且'a'出现在'b'之前,那么 a -> b 为真。

  2. 如果'a'是进程发送消息的事件,'b'是进程发送消息的事件 另一个进程收到消息,则 a-> b 也为真。

算法是如何工作的?

每条消息都有发送者的发送时间。所以接收机修改时间,以防它的时间小于发射机的时间。因此该算法同步接收器的时钟。 发送到另一个进程的每条消息都将包含发送消息的时间单位,因此会检查时钟。