Алгоритм Рикарта-Агравалы — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 10: Строка 10:
 
# После выхода из него он рассылает задержанные отклики на все ожидающие запросы.
 
# После выхода из него он рассылает задержанные отклики на все ожидающие запросы.
  
Алгоритм явялется Starvation-free. Требуется всего <tex>2 \cdot (N-1)</tex> сообщений.  
+
Алгоритм явялется Starvation-free. Суммарно на каждую критическую секцию приходится <tex>2 \cdot (N-1)</tex> сообщений.  
  
 
Отказ любого узла приводит к зависанию. Решается проблема введением таймаутов.
 
Отказ любого узла приводит к зависанию. Решается проблема введением таймаутов.

Версия 19:12, 16 мая 2018

Алгоритм Рикарта-Агравалы -- алгоритм взаимного исключения, являющийся оптимизацией алгоритма Лампорта.

  1. Когда процесс [math]P_i[/math] хочет войти в критический участок, то рассылает всем сообщение "запрос" с текущей временной меткой.
  2. Когда процесс [math]P_k[/math] получает от [math]P_j[/math] запрос войти в критический участок:
    • если он сам не посылал запрос, то посылает отклик;
    • если он послал свой запрос, он сравнивает временные метки этих двух запросов и посылает отклик только если у его собственного запроса метка позже (на самом деле, при равенстве меток, нужно проверять, у кого больше номер, т.е. для отсутствия блокировок нужно ввести приоритет на потоках);
    • в остальных случаях процесс [math]P_k[/math] задерживает отправку отклика.
  3. Процесс может войти в критический участок только после получения откликов ото всех других узлов сети.
  4. После выхода из него он рассылает задержанные отклики на все ожидающие запросы.

Алгоритм явялется Starvation-free. Суммарно на каждую критическую секцию приходится [math]2 \cdot (N-1)[/math] сообщений.

Отказ любого узла приводит к зависанию. Решается проблема введением таймаутов.