Problem with Strict Alternation as a Solution to
Problem with Strict Alternation as a Solution to Process Synchronization
turn 0 Initial State main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 0 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 0 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 Sets turn to 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 Value is 1. Wait. main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 Still 1. So, wait. main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 Still 1. So, wait. main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 Value is 1. So, carry on. main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 Still 1. So, wait. main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 1 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 0 Sets turn to 0 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 0 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 0 Value is now 0. So, carry on. main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
turn 0 main() { while (TRUE) { while (turn != 0) {} critical_region(); turn = 1; noncritical_region(); } } main() { while (TRUE) { while (turn != 1) {} critical_region(); turn = 0; noncritical_region(); } } noncritical_region() { //statement 1 //statement 2 //statement 3 //statement 4 //statement 5 } Process 0 Process 1
- Slides: 31