Взаимное исключение Лампорта - PullRequest
1 голос
/ 13 ноября 2010

учитывая алгоритм быстрого мьютекса лампорта, я пытаюсь понять, почему они там ожидают.

Алгоритм:

start: b[i] = true
      x = i 
      if y != 0 then b[i] = false
                          await y = 0
                          goto start 
      fi
      y = i
      if x != i then b[i] = false
                         for j = 1 to n do await b[j] = false od
                         if y != i then await y = 0
                                            goto start 
                         fi 
      fi
      critical section
      y = 0
      b[i] = false 

Разве мы не можем просто удалить их обоих?

1 Ответ

3 голосов
/ 13 ноября 2010

Вы хотите подождать (заблокировать) вместо вращения (постоянно выполнять проверку доступности), пока другой процесс / поток находится в критической секции, в противном случае вы берете ресурсы, которые могли бы использоваться в другом месте. Если за один раз может выполняться только один поток, тогда вы не допустите, чтобы поток в критической секции работал во время всего вашего временного интервала, в результате чего выполнение программы выполнялось бы намного дольше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...