gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:46 24 4
gpt4 key购买 nike

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

From wikipedia :

In pseudocode, the algorithm for sending is:

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

The algorithm for receiving a message is:

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

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

最佳答案

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

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

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

如果您使用的是单调时钟,那么您还需要全局跟踪返回值,以确保每次调用都产生不同的值。但在那种情况下,您还不如使用计数器。还值得注意的是,单调时钟不从纪元开始计算(通常它们从系统启动开始计算,尽管标准将其完全打开),因此您不能通过比较两个不同系统的单调时钟值来推断任何内容。

关于algorithm - 我可以使用 Unix 时间作为 Lamport 时间戳吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53065865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com