Могу ли я использовать время Unix для метки времени Лампорта? - PullRequest
0 голосов
/ 30 октября 2018

Насколько я понимаю, временная метка lamport - это инструмент, используемый для обеспечения частичного упорядочения событий на нескольких сайтах.

Из википедии :

В псевдокоде алгоритм отправки:

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

Алгоритм получения сообщения:

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

Возможно ли, чтобы временные метки были временными метками Unix, которые увеличиваются автоматически в зависимости от времени, а не событий? Если каждый сайт использует временные метки Unix, не означает ли это, что события все еще частично упорядочены локально? Должен ли я изменить / пропустить алгоритм получения сообщения, или это просто неправильно использовать метки времени unix полностью?

1 Ответ

0 голосов
/ 30 октября 2018

К сожалению, временные метки Unix не гарантируются монотонно увеличивающимися, если только вы не используете MONOTONIC_CLOCK (который не гарантированно существует в данной системе, но на самом деле широко применяется).

Даже если монотонные часы поддерживаются, не гарантируется, что два последовательных вызова clock_gettime вернут разные значения, если между двумя вызовами не прошло достаточно времени.

Поскольку системный вызов time() не использует монотонные часы, если «Unix timestamp» означает «значение, возвращаемое time(NULL)», тогда ответ «определенно неправильно использовать Unix timestamp».

Если вы используете монотонные часы, вам также необходимо глобально отслеживать возвращаемые значения, чтобы гарантировать, что каждый вызов выдает отдельное значение. Но в этом случае вы можете просто использовать счетчик. Также стоит отметить, что монотонные часы не отсчитываются от эпохи (обычно они отсчитываются от загрузки системы, хотя стандарт оставляет их полностью открытыми), поэтому вы не можете ничего сделать из сравнения значений монотонных часов из двух разных систем.

...