📜  门| Gate IT 2005 |第42章

📅  最后修改于: 2021-06-29 17:49:36             🧑  作者: Mango

如下所示,两个并发进程P1和P2使用四个共享资源R1,R2,R3和R4。

P1 P2
Compute:
Use R1;
Use R2;
Use R3;
Use R4;
Compute;
Use R1;
Use R2;
Use R3;.
Use R4;

这两个进程是同时启动的,并且每次只能通过一个进程访问每个资源。在进程对资源的访问之间存在以下调度约束:

  • 在P1访问R1之前,P2必须完成对R1的使用
  • 在P2访问R2之前,P1必须完成对R2的使用。
  • 在P1访问R3之前,P2必须完成对R3的使用。
  • 在P2访问R4之前,P1必须完成对R4的使用。

流程之间没有其他调度约束。如果仅使用二进制信号量来执行上述调度约束,那么所需的最小二进制信号量是多少?

(A) 1
(B) 2
(C) 3
(D) 4答案: (B)
解释:
我们使用两个信号量:A和B。
A初始化为0,B初始化为1。

P1:

Compute;
Wait(A);
Use R1;
Use R2;
Signal(B);
Wait(A);
Use R3;
Use R4;
Signal(B);
 
P2:

Compute;
Wait(B);
Use r1;
Signal(A); 
Wait(B);
Use R2;
Use R3;
Signal(A);
Wait(B);
Use R4;
Signal(B);

在过程p1中,最初的控制将停留在Wait(A)的while循环中,因为A = 0。
在过程p2中,Wait(B)将B的值减为0。现在,P2使用资源R1,并将值A增加到1,以便进程P1可以进入其关键部分并使用资源R1。因此,P2将在P1访问R1之前完成R1的使用。现在,在P2中,B的值=0。因此,直到P1使用R2并调用函数Signal(B)将B的值增加到1,P2才能使用资源R2。
因此,P1将在P2访问R2之前完成R2的使用。现在,信号量A =0。因此,P1无法进一步执行,并陷入了函数Wait(A)的while循环中。
进程P2使用R3并将信号量A的值增加到1。现在,P1可以进入其关键部分以使用R3。
因此,P2将在P1访问R3之前完成R3的使用。现在,P1将使用R4并将B的值增加到1,以便P2可以进入使用R4的关键区域。
因此,P1将在P2访问R4之前完成R4的使用。
因此,选项(B)是正确的。
如果您在以上文章中发现任何错误,请在下面发表评论。这个问题的测验