Skip to content

逻辑时钟

Logical clock · Lamport clock

为事件赋整数时间戳并保证因果先后蕴含时间戳递增。

形式陈述

Lamport 逻辑时钟为每个事件 a 赋整数 C(a),满足时钟条件

abC(a)<C(b),

其中 是 happens-before 关系。典型实现中,每个进程在本地事件前递增计数器;发送消息携带当前值;接收带时间戳 t 的消息时令

Cmax(C,t)+1.

(C(a),pid(a)) 的字典序可扩张为事件全序,但附加的进程编号顺序不表示因果。

直觉

逻辑时钟不测量物理秒数,而是给因果先后安排一致的编号。若一个事件可能影响另一个事件,编号必须递增;彼此无关的事件也可能恰有不同编号。

例子与边界

C(a)<C(b) 的逆命题一般不成立:两个并发事件可能分别取时间戳 5 与 8。只比较标量时间戳不能精确判断并发。逻辑时钟也不保证与真实墙钟接近,网络延迟和时钟漂移不是其目标。

推论与应用

Lamport 时钟用于因果一致的事件排序、分布式互斥与日志重放。它提供 happens-before 的保序嵌入;需要精确恢复因果偏序时,应使用向量时钟等更丰富结构。

参考资料
  • Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996,Ch. 6。
  • Leslie Lamport, “Time, Clocks, and the Ordering of Events in a Distributed System,” Communications of the ACM 21(7), 1978,Full paper, §§1–3。