Вопрос

В 6-м выпуске Концепции операционной системы представлен один триальный алгоритм для реализации схемы.

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 в его оставшейся части могут существовать одновременно ... <р> Так это утверждение неверно?

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top