Eisenberg & McGuire algorithm explained

The Eisenberg & McGuire algorithm is an algorithm for solving the critical sections problem, a general version of the dining philosophers problem. It was described in 1972 by Murray A. Eisenberg and Michael R. McGuire.

Algorithm

All the n-processes share the following variables:enum pstate = ;pstate flags[n];int turn;

The variable turn is set arbitrarily to a number between 0 and n−1 at the start of the algorithm.

The flags variable for each process is set to WAITING whenever it intends to enter the critical section. flags takes either IDLE or WAITING or ACTIVE.
Initially the flags variable for each process is initialized to IDLE.
repeat until ((index >= n) && ((turn = i) || (flags[turn] = IDLE)));

/* Start of CRITICAL SECTION */

/* claim the turn and proceed */ turn := i;

/* Critical Section Code of the Process */

/* End of CRITICAL SECTION */

/* find a process which is not IDLE */ /* (if there are no others, we will find ourselves) */ index := (turn+1) mod n; while (flags[index] = IDLE)

/* give the turn to someone that needs it, or keep it */ turn := index;

/* we're finished now */ flags[i] := IDLE;

/* REMAINDER Section */

See also

References

External links