Изменения

Перейти к: навигация, поиск

Алгоритм Лампорта взаимного исключения

147 байт добавлено, 19:04, 16 мая 2018
Нет описания правки
[[Категория: Параллельное программирование]]
'''Алгоритм Лампорта''' -- алгоритм взаимного исключения:, работающий в случае, если все сообщения идут FIFO и использующий логические часы Лампорта.
Используются логические часы Лампорта. Каждый поток поддерживает очередь запросов на вход в критическую секцию. Приоритет – <временная метка, номер потока> (т.е при равенстве временных меток берем тот поток, чей номер меньше).
Когда поток хочет войти в критическую секцию, он:
# Добавляет свой запрос в свою очередь (т.е временную метку и номер потока)
# Посылает всем потокам запрос(req)# Ждет от них ответа(ok)
# Получив все ответы, ждет, когда он станет первым в своей очереди, и входит в критическую секцию
# Выйдя из критической секции, посылает всем сообщение releaseо том, что вышел (rel)
Действия вне критической секции:
* При получении запроса от другого потока, запрос добавляется в очередь и запрашивающему потоку посылается ответ.
* При получении release от другого потока, его запрос удаляется из очереди
Суммарно на каждую критическую секцию приходится <tex>3(N - 1)</tex> сообщение.
Анонимный участник

Навигация