Critical Section Algorithm 3
(Peterson's Algorithm)

P0

do {

 

    flag[0] = true;

    turn = 1;

    while (flag[1] && turn == 1);

critical section

    flag[0] = false;

remainder section

} while (true);

P1

do {

 

    flag[1] = true;

    turn = 0;

    while (flag[0] && turn == 0);

critical section

    flag[1] = false;

remainder section

} while (true);