Алгоритм Рикарта-Агравалы — различия между версиями
Строка 10: | Строка 10: | ||
# После выхода из него он рассылает задержанные отклики на все ожидающие запросы. | # После выхода из него он рассылает задержанные отклики на все ожидающие запросы. | ||
− | Алгоритм явялется Starvation-free. | + | Алгоритм явялется Starvation-free. Суммарно на каждую критическую секцию приходится <tex>2 \cdot (N-1)</tex> сообщений. |
Отказ любого узла приводит к зависанию. Решается проблема введением таймаутов. | Отказ любого узла приводит к зависанию. Решается проблема введением таймаутов. |
Версия 19:12, 16 мая 2018
Алгоритм Рикарта-Агравалы -- алгоритм взаимного исключения, являющийся оптимизацией алгоритма Лампорта.
- Когда процесс хочет войти в критический участок, то рассылает всем сообщение "запрос" с текущей временной меткой.
- Когда процесс
- если он сам не посылал запрос, то посылает отклик;
- если он послал свой запрос, он сравнивает временные метки этих двух запросов и посылает отклик только если у его собственного запроса метка позже (на самом деле, при равенстве меток, нужно проверять, у кого больше номер, т.е. для отсутствия блокировок нужно ввести приоритет на потоках);
- в остальных случаях процесс задерживает отправку отклика.
получает от запрос войти в критический участок:
- Процесс может войти в критический участок только после получения откликов ото всех других узлов сети.
- После выхода из него он рассылает задержанные отклики на все ожидающие запросы.
Алгоритм явялется Starvation-free. Суммарно на каждую критическую секцию приходится
сообщений.Отказ любого узла приводит к зависанию. Решается проблема введением таймаутов.