(a) turn = j is changed to turn = i for both processes

Process P0:                                                           Process P1;
repeat                                                                   repeat
      flag[0] := true;                                                       flag[1] := true;
            // I wants in                                                            // I wants in                                          
      turn := 0;                                                                turn := 1;
            // You have to wait for me                                     // You have to wait for me
      while (flag[1] & turn == 1);                                  while(flag[0] & turn == 0);
                CS                                                                          CS
      flag[0] := false;                                                       flag[1] := false;
            // 0 is done                                                                // 1 is done        
                 RS                                                                          RS
forever                                                                   forever

 

 

(b) the lines flag[i] = true and turn = j are reversed in both processes (it’s your turn, I want in)

 

Process P0:                                                           Process P1;
repeat                                                                   repeat
     turn := 1;                                                                turn := 0;
            // it’s your turn                                                        // it’s your turn                                          
     flag[0] := true;                                                       flag[1] := true;  
            // but I want in                                                           // but I want in
      while (flag[1] && turn == 1);                                while(flag[0] && turn == 0);
                CS                                                                          CS
      flag[0] := false;                                                       flag[1] := false;
            // 0 is done                                                                // 1 is done        
                 RS                                                                          RS
forever                                                                   forever

 

 

( c ) flag[i] = true and turn = j are reversed in Pi (it’s your turn, I want in), but the other process, Pj, is left with the order flag[j] = true and turn = i (I want in, it’s your turn)

 

 

Process P0:                                                           Process P1;
repeat                                                                   repeat
      turn := 1;                                                               flag[1] := true;
            // it’s your turn                                                       // I want in                                           
      flag[0] := true;                                                       turn := 0;
            // I want in                                                             // it’s your turn
      while (flag[1] && turn == 1);                                while(flag[0] && turn == 0);
                CS                                                                          CS
      flag[0] := false;                                                       flag[1] := false;
            // 0 is done                                                                // 1 is done        
                 RS                                                                          RS
forever                                                                   forever