292
правки
Изменения
Нет описания правки
Используются [[Логические часы Лампорта|логические часы Лампорта]].
Ниже алгоритм расписан чуть подробнее, чем в Garg и на лекции, но вроде всё ещё верно.
У каждого процесса есть очередь принятых необработанных multicast сообщений.
Каждое сообщение имеет временну́ю метку и флаг — финализирована ли метка.
# Инициатор отправляет сообщение и своё время (''предварительное время сообщения'') всем получателям
# При приеме сообщения процесс запоминает сообщение со времени временем в очередь (как нефинализированное) и отправляет свое время инициатору# Когда инициатору вернулись все сообщенияподтверждения, он выбирает максимальное время из них и снова отправляет сообщение со финализированным временем (уже ''финальное'')# Получатель обрабатывает может обработать сообщение, если оно помечено как финальное и имеет минимальное финальное время среди всех известных получателю сообщений (и финальных, и нефинальных; иначе может получиться, что финализация сообщений произойдёт в разном порядке у разных получателей и нарушится общий порядок)
Полный порядок задается финальными временными метками. Финальные метки нужны, чтобы как-то зависеть от времени получателей.
Доказательство на лекции и в Gaarg не приводилось.