Вопрос по алгоритму критического сечения - PullRequest
0 голосов
/ 25 октября 2009

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

do{
  while (turn != i);
    critical section
  trun = j;
    remainder section
} while(1);

Примечание , Pi - это процесс с идентификатором i, Pj - это процесс с идентификатором j. Чтобы упростить вопрос, книга ограничивает i, j 0 и 1, двумя процессами, константой окружающей среды.

Вопрос1 Является ли этот алгоритм аннулирующим требование Прогресс , которое является одним из трех требований к решению по сечению контура?

По моему мнению, когда Pi находится в своем оставшемся разделе, он не может участвовать в принятии решения о том, может ли Pj войти в критический раздел. Затем он связан с требованием.

Или мое понимание требований к прогрессу совершенно неверно. Так как если бы Пи вышел из оставшейся части, он не смог бы сразу попасть в круговую часть, это нарушило бы правило.

Вопрос2

Если поворот == 0 и P1 готов войти его критический раздел, P1 не может сделать так что, даже мысль P0 может быть в его остальная часть

В чем смысл этого утверждения? Насколько я мог подумать, я не мог понять, почему turn == 0 и p0 в его оставшейся части могут существовать одновременно ...

Так это утверждение неверно?

1 Ответ

2 голосов
/ 25 октября 2009

Предположим, что turn = 0 изначально. P0 делает свою критическую секцию и устанавливает turn = 1. Теперь P1 должен выполнить свою критическую секцию , прежде чем P0 сможет выполнить ее снова. Но то, что оба потока имеют критическую секцию , не означает, что они захотят поочередно использовать его таким образом & mdash; на самом деле, P1 может никогда не занять свою очередь. (И в общем случае вы не можете определить это во время компиляции .)

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

Кстати, ваш ответ на вопрос 1 правильный. Алгоритм не нарушает условие Progress , он не соответствует условию Bounded Waiting .

...