问题 问答题


阅读以下技术说明和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);
……做其他的事情……

【问题3】
【C代码1】采用了一种繁忙等待(busy waiting)的策略,这种策略的缺点是什么请用100字以内的文字简要说明。

答案

参考答案:

解析:由于该算法策略每个任务进程要循环地去判断当前能否访问临界资源,因此会浪费大量的CPU时间,而且如果设计不合理,容易导致死锁[要点解析] 本题考查的是进程之间的互斥问题,即基于繁忙等待(Busy Waiting)的进程互斥实现方法。其基本思路是,当一个进程要进入临界区,首先需要检查是否允许它进入,若允许,则直接进入;否则,则循环等待。 在多道程序系统中,各个进程是并发执行的,由于时钟中断的原因,使进程之间的执行顺序变得难以预测,每个进程都有可能在任意一条语句的后面被中断。在这种情况下,如果要采用基于繁忙等待的互斥实现方法,就必须考虑所有的可能情况,即如果每个进程在不同的位置被中断时,能否正确地实现进程间互斥。 由于该算法策略需要使用一个循环语句不断执行测试指令,即每个进程要循环地判断当前能否访问临界资源,因此会浪费大量的CPU时间,而且如果设计不合理,容易导致死锁。

判断题
单项选择题