这是我们讲座中提出的彼得森解决方案:
//P0:
do {
flag[0] = TRUE; turn = 1;
while(flag[1] && turn == 1);
//Critical section
flag[0] = FALSE;
//remainder section
} while(1)
//P1:
do {
flag[1] = TRUE; turn = 0;
while(flag[0] && turn == 0);
//critical section
flag[1] = FALSE;
//remainder section
} while(1)
Run Code Online (Sandbox Code Playgroud)
转变量本身不就已经保证了临界区的要求吗?像flag[]这里似乎没有必要。