Critical Section Problem: Bakery Algorithm (Page 2)


repeat

        choosing[i] := true;
        number[i] := max(number[0], number[1], ..., number[n-1])+1;
        choosing[i] := false;
        for j := 0 to n-1 do
        begin
                while choosing[j] do no-op;
                while ( number[j] != 0
                                and (number[j],j) < (number[i],i) ) do no-op;
        end;

                critical section

        number[i] := 0;

                remainder section

until false;