问题
填空题
[说明2]
有两个进程(编号分别为0和1)需要访问同一个共享资源。为了解决竞争条件(race condition)的问题,需要实现一种互斥机制,使得在任何时刻只能有一个进程访问该共享资源。以下[C程序代码2]给出了一种实现方法。
[C程序代码2]
int flag[2]; /*flaq数组, 初始化为FALSE*/
Enter_Critical_Section (int my_task_id, int other_task_id)
while (flag [other_task_id]==TRUE); /*空循环语句*/
flag[my_task_id]=TRUE;
Exit_Critical_Section (int my_task_id, int other_task_id)
flag[my_task id]=FALSE;
当一个进程要访问临界资源时,就可以调用[C程序代码2]给出的这两个函数。[C程序代码3]给出了进程0的一个例子。
[C程序代码3]
Enter_Critical_Section(0,1) ;
…使用这个资源…
Exit_Critical_Section (0,1) ;
…做其他的事情…
[C程序代码2]所示的方法______实现共享资源的互斥访问。
A.能够 B.不能
答案
参考答案:B或不能
解析: 中的方法不能实现资源的互斥访问。例如,考虑如下的情形。
(1) 初始化的时候,flag数组的两个元素值均为FALSE。
(2) 进程0先执行,在执行while循环语句时,由于flag[1]=FALSE,所以顺利结束,不会被卡住。假设这个时候来了一个时钟中断,打断它的运行。
(3) 进程1去执行,在执行while循环语句时,由于flag[0]=FALSE,所以顺利结束,不会被卡住,然后就进入了临界区。
(4) 后来当进程0再执行时,也进入了临界区,这样就同时有两个进程在临界区。