问题 填空题

[说明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]采用了一种繁忙等待(busy waiting)的策略,这种策略的主要缺点是什么 请用100字以内的文字简要说明。

答案

参考答案:该算法策略每个任务进程要循环地去判断当前能否访问临界资源,因此会浪费大量的CPU时间,而且当设计不合理时,容易导致死锁

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

解答题
填空题