(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