163

问答题 163 /170

何谓临界区?下面给出的两个进程互斥的算法是安全的吗?为什么? 
#define true; 
# define false;
int flag[2]; 
flag[1]=flag[2]=false; 
enter-crtsec(i) 
int i; 
{ 
While(flag[1-i]) 
flag[i]=true; 
} 
leave-crtsec(i) 
int i; 
{ 
flag[i]=false; 
} 
process I; 
… 
Enter-crtsec(i); 
In critical section; 
Leave-crtsec(i);

参考答案

一次仅允许一个进程使用的资源称为临界资源,在进程中对临界资源访问的程序段称为临界区。从概念上讲,系统中各进程在逻辑上是独立的,它们可以按各自的速度向前推进。但由于它们共享某些临界资源,因而产生了临界区问题。对于具有临界区问题的并发进程,它们之间必须互斥,以保证不会同时进入临界区。这种算法不是安全的。因为,在进入临界区的enter-crtsec()不是一个原语操作,如果两个进程同时执行完其循环(此前两个flag均为false),则这两个进程可同时进入临界区。