Вопрос по алгоритму критического сечения
-
06-07-2019 - |
Вопрос
В 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 .