M0,M1,M2,M3,M4 ----- 5 binary semaphores
P0,P1,P2,P3,P4 ----- 5 processes
1)
|
P0 |
P1 |
P2 |
P3 |
P4 |
wait(m[i]) |
wait(m[0]) |
wait(m[1]) |
wait(m[2]) |
wait(m[3]) |
wait(m[4]) |
wait(m[i+1] mod 3) |
wait(m[1]) |
wait(m[2]) |
wait(m[0]) |
wait(m[1]) |
wait(m[2]) |
if every process executes wait(m[i]) then it will lead to dead lock.
2)
|
P0 |
P1 |
P2 |
P3 |
P4 |
wait(m[i]) |
wait(m[0]) |
wait(m[1]) |
wait(m[2]) |
wait(m[3]) |
wait(m[4]) |
wait(m[i+1] mod 5) |
wait(m[1]) |
wait(m[2]) |
wait(m[3]) |
wait(m[4]) |
wait(m[0]) |
if every process executes wait(m[i]) then it will also lead to dead lock.
even if you change the sentences as wait(m[i+1] mod 3); wait(m[i]); instead of wait(m[i]); wait(m[i+1] mod 3);
1)
|
P0 |
P1 |
P2 |
P3 |
P4 |
wait(m[i+1] mod 3) |
wait(m[1]) |
wait(m[2]) |
wait(m[0]) |
wait(m[1]) |
wait(m[2]) |
wait(m[i]) |
wait(m[0]) |
wait(m[1]) |
wait(m[2]) |
wait(m[3]) |
wait(m[4]) |
if every process executes wait(m[i+1] mod 3) then it will lead to dead lock.
2)
|
P0 |
P1 |
P2 |
P3 |
P4 |
wait(m[i+1] mod 5) |
wait(m[1]) |
wait(m[2]) |
wait(m[3]) |
wait(m[4]) |
wait(m[0]) |
wait(m[i]) |
wait(m[0]) |
wait(m[1]) |
wait(m[2]) |
wait(m[3]) |
wait(m[4]) |
if every process executes wait(m[i+1] mod 5) then it will lead to dead lock.