问答题 论述一下解决双进程临界区问题的软件算法是错误的。
Process P0:
do {
flag[0]=true; ①
while(flag[1]); ③
临界区
Flag[0]=false;
} while(1);
Process P1:
do {
flag[1]=true; ②
while(flag[0]); ④
临界区
Flag[1]=false;
} while(1);
【正确答案】
【答案解析】通过使用标志牌flag[0]和flag[1]能够保证满足“互斥”条件。但是,当两个进程按照①②③④的顺序执行程序时,它们各自举起标志牌,同时都因为观察到对方也举起了标志牌而等待在while语句中。由于两个进程都不会放下自己的标志牌,因此都无法进入临界区,不能满足“有限等待”的条件。所以,上述解决双进程临界区问题的算法是错误的。 [解析] 在算法中,两个进程P 1 和P 2 各自拥有自己的标志牌flag[0]和flag[1]。当进程需要进入临界区时,举起标志牌(设置值为true)。然后观察对方是否举起标志牌,是则等待并继续观察(while语句),直到对方放下标志牌(设置值为false)。这时,进程才进入临界区。进程退出临界区时,放下标志牌(设置值为false)。