Как мы знаем, алгоритм должен придерживаться трех правил: взаимное исключение, ограниченное ожидание и прогресс.Во-первых, важно отметить, что мы работаем с двумя процессами: P1 и P2.
Мы рассмотрим следующий алгоритм:
//Global variables
flag[] = false So, for instance Flag[i] for P1 and Flag[j] for P2, both initially false
int turn //initially 1 or 2 for P1 or P2 respectively
//the algorithm
while(true){
flag[i] = true
while(turn != 1) {
while(flag[j]);
turn = 1;
}
crit_1();
flag[i] = false;
rem_1();
}
Доказательство того, что он не привязан к мьютексу илиограниченное ожидание просто:
Mutex: ![Mutual Exclusion](https://i.stack.imgur.com/bSUmg.png)
Ограниченное ожидание:
![Bounded waiting](https://i.stack.imgur.com/MlTjG.png)
(Мои извинения за то, что я сделал это в таблице MS Word - это самое быстрое, что я мог придумать, чтобы сделать это (полу) читабельным).
Теперь, независимо от того, о каком сценарии я думаю,Я не могу запутать оба процесса в цикле while (и, следовательно, доказать, что он не придерживается правила прогресса).Я уверен, что это что-то очень простое, что я пропускаю, но да.
Любая помощь будет признательна.