Алгоритм Лампорта

Материал из Викиконспекты
Перейти к: навигация, поиск
НЕТ ВОЙНЕ

24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.

Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием.

Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей.

Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить.

Антивоенный комитет России

Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки.

Алгоритм организует общий порядок сообщений.

Модифицируем алгоритм Лампорта взаимного исключения. Будем предполагать FIFO-порядок сообщений. Также будем предполагать, что сообщения транслируются всем процессам (для multicast-сообщений это неэффективно, потому что придётся отсылать их всем и фильтровать на стороне получателя). Каждый процесс содержит логические часы и очередь отправленных сообщений.

Алгоритм действует по следующим правилам (на лекции и в Garg они не очень подробно разобраны, тут дописано):

  1. Чтобы отправить сообщение, процесс транслирует сообщение и свое время всем процессам, включая себя (шаг аналогичен запросу на вход в критическую секцию)
  2. При приеме сообщения оно:
    • Сохраняется вместе со временем
    • Отправляется подтверждение инициатору, также помеченное временем (шаг аналогичен подтверждению запроса)
  3. Когда инициатор получает все подтверждения и у его broadcast-сообщения минимальное время из известных, можно разослать всем подтверждение обработки этого сообщения, после чего процессы его обработают и удалят из очереди (шаг аналогичен работе и отпусканию критической секции).

Итого $3(n-1)$ сообщений на каждый broadcast (не обсуждалось на лекции или в книжке, но вроде так).