📜  门|门 IT 2005 |第 42 题

📅  最后修改于: 2021-09-25 07:39:04             🧑  作者: 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;

两个进程同时启动,每个资源一次只能被一个进程访问 进程对资源的访问之间存在以下调度约束:

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

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

(一) 1
(乙) 2
(三) 3
() 4答案:(乙)
解释:
我们使用两个信号量: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 的使用。现在,在 B = 0 的 P2 值中。因此,P2 不能使用资源 R2,直到 P1 使用 R2 并调用函数Signal(B) 将 B 的值增加到 1。
因此,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)是正确的。
如果您发现上面的帖子有任何错误,请在下面发表评论。这个问题的测验