The following is alleged to be a solution to the critical se

The following is alleged to be a solution to the critical section problem. Argue for its correctness or show a case in which it fails.

shared int turn; /* shared variables to synchronize operation */
boolean flag[2]; /* shared variables to synchronize operation */

proc (int i) {
while (TRUE) {
<compute>;
flag[i] = TRUE;/* Attempt to enter the critical section */
       turn = (i+1)mod 2;
while ((flag[(i+1) mod 2]) && (turn == (i+1) mod 2)) ;
/*Now authorized to enter the critical section */   
<critical section>;
/* Exiting the critical section */
flag[i] = FALSE; // Indicate no desire to enter my c.s.
}
}
turn = 0;   
flag[0] = flag[1] = FALSE;
fork (proc, 1, 0); /* Start a process to run proc(0) */
fork (proc, 1, 1); /* Start a process to run proc(1) */

Solution

proc (int i) {
while (TRUE) {
<compute>;
flag[i] = TRUE;/* Attempt to enter the critical section */
       turn = (i+1)mod 2;
while ((flag[(i+1) mod 2]) && (turn == (i+1) mod 2)) ;
/*Now authorized to enter the critical section */   
<critical section>;
/* Exiting the critical section */
flag[i] = FALSE; // Indicate no desire to enter my c.s.
}
}
turn = 0;   
flag[0] = flag[1] = FALSE;
fork (proc, 1, 0); /* Start a process to run proc(0) */
fork (proc, 1, 1);

The following is alleged to be a solution to the critical section problem. Argue for its correctness or show a case in which it fails. shared int turn; /* share

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site