问题 问答题


阅读以下技术说明和C语言代码,根据要求回答问题1至问题6。
【说明】
有两个进程(编号分别为0和1)需要访问同一个共享资源。为了解决竞争条件(race condition)的问题,需要实现一种互斥机制,使得在任何时刻只能有一个进程访问该共享资源。以下【C代码1】给出了一种实现方法。
【C代码1】
int flag[2]; /+flag数组,初始化为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代码1】给出的这两个函数。【C代码2】给出了进程0的一个例子。
【C代码2】
Enter_Critical_Section(0,1);
……使用这个资源……
Exit_Critical_Section(0,1);
……做其他的事情……

【问题2】
【C代码1】所示的方法 (1) 实现共享资源的互斥访问。
(1) A.能够B.不能

答案

参考答案:

解析:B或不能[要点解析] 【C代码1】所示的方法不能实现资源的互斥访问。例如,考虑如下的情形。 1)初始化的时候,flag数组的两个元素值均为FALSE: 2)进程0先执行,在执行while循环语句时,由于flag[1]=FALSE,所以程序顺利结束,不会被卡住,假设此时出现一个时钟中断,打断它的运行; 3)进程1去执行,在执行while循环语句时,由于flag[0]=FALSE,所以程序顺利结束,不会被卡住,然后就进入了临界区; 4)当进程0再执行时,也进入了临界区,这样就同时有两个进程在临界区。

单项选择题
填空题