Algorithm 我可以使用Unix时间作为Lamport时间戳吗?

Algorithm 我可以使用Unix时间作为Lamport时间戳吗?,algorithm,messaging,distributed-computing,distributed,crdt,Algorithm,Messaging,Distributed Computing,Distributed,Crdt,据我所知,lamport时间戳是一种工具,用于确保跨多个站点的事件具有偏序 : 在伪码中,发送的算法是: time = time + 1; time_stamp = time; send(message, time_stamp); 接收消息的算法是: (message, time_stamp) = receive(); time = max(time_stamp, time) + 1; 时间戳是否可能是unix时间戳,它根据时间而不是事件自动递增?如果每个站点都使用unix时间戳,这不意味着

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

:

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

time = time + 1;
time_stamp = time;
send(message, time_stamp);
接收消息的算法是:

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

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

不幸的是,unix时间戳不能保证单调递增,除非您使用(不能保证在给定系统上存在,但事实上已广泛实现)

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

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

如果您使用的是单调时钟,那么您还需要全局跟踪返回的值,以确保每个调用生成一个不同的值。但在这种情况下,你最好使用一个计数器。还值得注意的是,单调时钟不从历元开始计数(通常从系统启动开始计数,尽管标准将其完全打开),因此您无法通过比较两个不同系统的单调时钟值推断出任何结果