我可以将Unix时间用于Lamport时间戳吗?

问题描述 投票:1回答:1

据我所知,lamport时间戳是一种用于确保跨多个站点的事件具有部分排序的工具。

From wikipedia

在伪代码中,发送算法是:

time = time + 1;
time_stamp = time;
send(message, time_stamp);

接收消息的算法是:

(message, time_stamp) = receive();
time = max(time_stamp, time) + 1;

时间戳是否可以是unix时间戳,它会根据时间而不是事件自动递增?如果每个站点都使用unix时间戳,那是不是意味着事件仍在本地部分排序?我是否必须更改/省略接收消息的算法,或者完全使用unix时间戳是否错误?

algorithm messaging distributed-computing distributed crdt
1个回答
3
投票

遗憾的是,除非你使用MONOTONIC_CLOCK(不保证在给定系统上存在,但事实上已广泛实现),否则不能保证Unix时间戳单调递增。

即使支持单调时钟,如果两次调用之间没有足够的时间,也不能保证对clock_gettime的两次连续调用将返回不同的值。

由于time()系统调用不使用单调时钟,如果“Unix时间戳”表示“time(NULL)返回的值”,那么答案是“使用Unix时间戳肯定是错误的”。

如果您使用的是单调时钟,那么您还需要全局跟踪返回值,以保证每个调用产生一个不同的值。但在这种情况下,你可能只是使用一个计数器。同样值得注意的是,单调时钟不计入时代(通常它们从系统引导计算,尽管标准使其完全打开),因此您无法从比较两个不同系统的单调时钟值中推断出任何东西。

© www.soinside.com 2019 - 2024. All rights reserved.