Синхронизация процесса - попытка понять, почему следующий алгоритм не придерживается правила «прогресса» - PullRequest
0 голосов
/ 21 января 2019

Как мы знаем, алгоритм должен придерживаться трех правил: взаимное исключение, ограниченное ожидание и прогресс.Во-первых, важно отметить, что мы работаем с двумя процессами: 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

Ограниченное ожидание:

Bounded waiting

(Мои извинения за то, что я сделал это в таблице MS Word - это самое быстрое, что я мог придумать, чтобы сделать это (полу) читабельным).

Теперь, независимо от того, о каком сценарии я думаю,Я не могу запутать оба процесса в цикле while (и, следовательно, доказать, что он не придерживается правила прогресса).Я уверен, что это что-то очень простое, что я пропускаю, но да.

Любая помощь будет признательна.

...