我理解正常一个进程的程序是这样写的:
int number;
enter_region(number);
这里是临界区的操作;
leave_region();
当进程 0 执行了 enter_region(0);,但还没有执行 leave_region 时。此时进程 1 去执行 enter_region(1);,会发现:
- 不仅
turn == process成立了(我理解,这代表当前进程正在请求) - 而且 interested[other] == True 所以进程 1 要进入这个无限循环,直到进程 0 执行 leave_region 。
但是现在有这种特殊情况:
- 都运行到 while 语句前时,turn 这个全局变量被设为 1 ,因为进程 1 后执行
- 然后进程 0 ,由于不满足
turn == process&&interested[other] == True的第一个条件,直接短路,然后不执行这个循环,然后进程 0 进入到 临界区。 -
我的疑惑点在于:为什么
turn == process不成立,就直接短路,然后就让当前进程去临界区了呢(虽然确实是正常工作了,这之后,进程 0 进入临界区,进程 1 则无限循环了)?总感觉有点反直觉,不知道该怎么解释- 感觉正常情况的话,应该是如上的:
turn == process成立,但interested[other] == True不成立。
- 感觉正常情况的话,应该是如上的: