Вот алгоритм решения двух процессов 1:
turn = 0;
i = 0, j = 1;
do
{
while (turn != i) ; //if not i's turn , wait indefinitely
// critical section
turn = j; //after i leaves critical section, lets j in
//remainder section
} while (1); //loop again
Я так понимаю, что взаимное исключение выполнено. Потому что, когда P0 находится в критической секции, P1 ждет, пока не покинет критическую секцию. И после обновления P0, P1 входит в критическую секцию. Я не понимаю, почему в этом алгоритме не выполняется прогресс.
Прогресс заключается в том, что если в критической секции нет процесса, ожидающего процесса, он должен иметь возможность войти в критическую секцию без ожидания.
Обновления P0 переключаются после выхода из критической секции, поэтому P1, ожидающий в цикле while, должен иметь возможность войти в критическую секцию. Подскажите, пожалуйста, почему тогда нет прогресса?