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

Материал из Викиконспекты
Перейти к: навигация, поиск
м
Строка 2: Строка 2:
 
'''Алгоритм Лампорта''' взаимного исключения:
 
'''Алгоритм Лампорта''' взаимного исключения:
  
Каждый поток поддерживает очередь запросов на вход в критическую секцию. Приоритет – временная метка (часы с прямой зависимостью) (+ номер потока ?).
+
Используются логические часы Лампорта. Каждый поток поддерживает очередь запросов на вход в критическую секцию. Приоритет – временная метка (важно: при равенстве временных меток берем тот поток, чей номер меньше).
  
 
Когда поток хочет войти в критическую секцию, он:  
 
Когда поток хочет войти в критическую секцию, он:  

Версия 18:46, 9 марта 2018

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

Используются логические часы Лампорта. Каждый поток поддерживает очередь запросов на вход в критическую секцию. Приоритет – временная метка (важно: при равенстве временных меток берем тот поток, чей номер меньше).

Когда поток хочет войти в критическую секцию, он:

  1. Добавляет свой запрос в свою очередь
  2. Посылает всем потокам запрос
  3. Ждет от них ответа
  4. Получив все ответы, ждет, когда он станет первым в своей очереди, и входит в критическую секцию
  5. Выйдя из критической секции, посылает всем сообщение release

Действия вне критической секции:

  • При получении запроса от другого потока, запрос добавляется в очередь и запрашивающему потоку посылается ответ.
  • При получении release от другого потока, его запрос удаляется из очереди

Суммарно на каждую критическую секцию приходится [math]3(N - 1)[/math] сообщение.