The first known correct software solution to the critical-section problem for two processes was developed by Dekker. The two processes, P0 and P1, share the following variables:
boolean $flag[2]$; /* initially false */
int turn;
The structure of process Pi (i == 0 or 1) is shown below. The other process is Pj (j == 1 or 0). Prove that the algorithm satisfies all three requirements for the critical-section problem.
do {
$flag[i]$ = true;
while ($flag[j]$) {
if (turn == j) {
$flag[i]$ = false;
while (turn == j)
; /* do nothing */
$flag[i]$ = true;
}
}
/* critical section */
turn = j;
$flag[i]$ = false;
/* remainder section */
} while (true);