Алгоритм Рикарта-Агравалы — различия между версиями
Yeputons (обсуждение | вклад) |
м (rollbackEdits.php mass rollback) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
[[Категория: Параллельное программирование]] | [[Категория: Параллельное программирование]] | ||
− | '''Алгоритм Рикарта-Агравалы''' — алгоритм взаимного исключения, являющийся оптимизацией [Алгоритм Лампорта взаимного исключения|алгоритма Лампорта]. | + | '''Алгоритм Рикарта-Агравалы''' — алгоритм взаимного исключения, являющийся оптимизацией [[Алгоритм Лампорта взаимного исключения|алгоритма Лампорта]]. |
Мы объединяем запросы rel и ok в один: вместо отправки ok сразу посылаем только если не хотим входить в критическую секцию или сразу как только выйдем из секции. | Мы объединяем запросы rel и ok в один: вместо отправки ok сразу посылаем только если не хотим входить в критическую секцию или сразу как только выйдем из секции. |
Текущая версия на 19:41, 4 сентября 2022
Алгоритм Рикарта-Агравалы — алгоритм взаимного исключения, являющийся оптимизацией алгоритма Лампорта.
Мы объединяем запросы rel и ok в один: вместо отправки ok сразу посылаем только если не хотим входить в критическую секцию или сразу как только выйдем из секции.
- Когда процесс хочет войти в критический участок, то рассылает всем сообщение req с текущей временной меткой.
- Когда процесс
- если он сам не посылал запрос, то посылает отклик;
- если он послал свой запрос, он сравнивает временные метки этих двух запросов и посылает отклик только если у его собственного запроса метка позже (на самом деле, при равенстве меток, нужно проверять, у кого больше номер, т.е. для отсутствия блокировок нужно ввести приоритет на потоках);
- в остальных случаях процесс задерживает отправку отклика.
получает от запрос войти в критический участок:
- Процесс может войти в критический участок только после получения откликов ото всех других узлов сети.
- После выхода из него он рассылает задержанные отклики на все ожидающие запросы.
В отличие от алгоритма Лапрота, нам не требуется ни третьего сообщения, ни хранить очередь запросов в каждом процессе.
Алгоритм является starvation-free. Суммарно на каждую критическую секцию приходится
сообщений.Отказ любого узла приводит к зависанию. Решается проблема введением таймаутов.