Mutual exclusion
A mutual exclusion (mutex) is a program object that prevents simultaneous access to a shared resource. This concept is used in concurrent programming with a critical section, a piece of code in which processes or threads access a shared resource.
Peterson’s solution for mutual exclusion problem:
Peterson’s Solution
- By combining the idea of taking turns with the idea of lock variables and warning variables, Peterson discovered a much simpler way to achieve mutual exclusion.
- This algorithm consists of two procedures written in ANSI C as shown below.
- Before using the shared variables (i.e., before entering its critical region), each process calls procedure enter_region with its own process number, 0 or 1, as parameter.
- This call will cause it to wait, if needed, until it is safe to enter critical region.
- After it has finished with the shared variables, the process calls leave_region to indicate that it is done and to allow the other process to enter, if it so desires.
- Let us see how this solution works. Initially neither process is in its critical region.
- Now process 0 calls enter_region. It indicates its interest by setting its array element and sets turn to 0.
- Since process 1 is not interested, enter_region returns immediately. If process 1 now calls enter_region, it will be blocked there until interested [0] goes to FALSE, an event that only happens when process 0 calls leave_region to exit the critical region.
- Now consider the case that both processes call enter_region almost simultaneously. Both will store their process number in turn. Whichever store is done last is the one that counts; the first one is overwritten and lost.
- Suppose that process 1 stores last, so turn is 1. When both processes come to the while statement, process 0 executes it zero times and enters its critical region.
- Process 1 loops and does not enter its critical region until process 0 exits its critical region.