问题 问答题

设A、B为两个并发进程,它们共享一个临界资源,其执行临界区的算法框图如图2.10所示。试判断该算法是否有错请说明理由。如果有错,请改正。Sl、S2的初值为0,CSA、CSB为临界区。

答案

参考答案:该算法有错。一方面,首次访问临界资源必须是A进程,如果A进程永不要求访问临界资源,则不会执行V(S1),那么B进程永远得不到操作临界资源的机会;另一方面,如果A进程首次访问了临界资源,那么接下来,只能两个进程交替使用临界资源,如果有一个进程不再访问临界资源,则另一个进程下次将得不到操作临界资源的机会。所以问题在于:本应进行互斥控制,却使用的是同步控制。改正如下:
设置信号mutex
mutex:=1;
Cobegin
A进程:
Begin
repeat
p(mutex);
CSA;
V(mutex);
until false
End
B进程:
Begin
repeat
P(mutex);
CSB;
V(mutex);
until false
End
Coend

解析: 本题目考查进程同步算法的判断。

问答题 简答题
读图填空题