Алгоритм пекарни (тупик?) - PullRequest
1 голос
/ 10 декабря 2011

http://en.wikipedia.org/wiki/Lamport%27s_bakery_algorithm

У меня есть некоторые проблемы, чтобы понять этот алгоритм. Что произойдет, если текущий поток и поток, который я смотрю на данный момент в цикле for, совпадают?

Тем: 0, 1, 2

Поток 1 принимает билет 1. Поток 2 принимает билет 2. Поток 0 ничего не делает.

Array = i: 0, 1, 2

Раунд 1:

  • Поток 1 (j = 0): массив [0] = 0. следующий.
  • Поток 2 (j = 0): массив [0] = 0. следующий.

Раунд 2:

  • Тема 1 (j = 1): Массив [1] = 1. (1,1)> (1,1)
  • Тема 2 (j = 1): Массив [1] = 1. (1,1)> (2,2)

(1,1)> (1,1) неправильно. (1,1)> (2,2) неправильно.

Обе темы ожидают ...

Что не так? Это тупик?

1 Ответ

2 голосов
/ 10 декабря 2011

Цикл while в алгоритме позволяет потоку войти в критическую секцию, когда выполняется неравенство , а не .Он говорит: подождите, пока выполняется условие (Число [j]! = 0) && ((Число [j], j) <(Число [i], i). </p>

Так как (1,1) не больше (1,1), поток 1 может пройти цикл и войти в критическую секцию.

...