292
правки
Изменения
Нет описания правки
[[Категория: Параллельное программирование]]
'''Алгоритм Рикарта-Агравалы''' -- — алгоритм взаимного исключения, являющийся оптимизацией [Алгоритм Лампорта взаимного исключения|алгоритма Лампорта].
Мы объединяем запросы rel и ok в один: вместо отправки ok сразу посылаем только если не хотим входить в критическую секцию или сразу как только выйдем из секции. # Когда процесс <tex>P_i</tex> хочет войти в критический участок, то рассылает всем сообщение "запрос" req с текущей временной меткой.
# Когда процесс <tex>P_k</tex> получает от <tex>P_j</tex> запрос войти в критический участок:
#* если он сам не посылал запрос, то посылает отклик;
# После выхода из него он рассылает задержанные отклики на все ожидающие запросы.
В отличие от алгоритма Лапрота, нам не требуется ни третьего сообщения, ни хранить очередь запросов в каждом процессе. [[Файл:mutex-distributed-ricart.png|400px]] Алгоритм явялется Starvationявляется starvation-free. Суммарно на каждую критическую секцию приходится <tex>2 \cdot (N-1)</tex> сообщений.
Отказ любого узла приводит к зависанию. Решается проблема введением таймаутов.