📜  门|门CS 2008 |第 63 题

📅  最后修改于: 2021-09-25 04:42:14             🧑  作者: Mango

对计数信号量的 P 和 V 操作,其中 s 是计数信号量,定义如下:

P(s) : s =  s - 1;
  if (s  < 0) then wait;
V(s) : s = s + 1;
  if (s <= 0) then wakeup a process waiting on s;

假设 Pb 和 Vb 提供了对二进制信号量的等待和信号操作。两个二进制信号量 Xb 和 Yb 用于实现信号量操作 P(s) 和 V(s) 如下:

P(s) : Pb(Xb);
  s = s - 1;
  if (s < 0) {
   Vb(Xb) ;
   Pb(Yb) ;
  }
  else Vb(Xb); 

V(s) : Pb(Xb) ;
  s = s + 1;
  if (s <= 0) Vb(Yb) ;
  Vb(Xb) ;

Xb 和 Yb 的初始值分别为

(一) 0 和 0
(B) 0 和 1

(C) 1 和 0

(D) 1 和 1答案: (C)
解释:假设 Xb = 0,那么由于 P(s): Pb(Xb) 操作,Xb 将为 -1,进程将被阻塞,因为它将进入等待部分。

因此,Xb 将是其中之一。

假设s=2(表示2个进程正在访问共享资源),取Xb为1,

第一个 P(s): Pb(Xb) 操作将使 Xb 为零。 s 将为 1,然后将执行 Vb(Xb) 操作,这将增加 Xb 的计数为 1。然后将重复相同的过程,使 Xb 为 1,s 为 0。

现在假设还有一个进程,那么 Xb 将为 0,但 s 将为 -1,这将使该进程进入循环(s <0)并导致调用 Vb(Xb) 和 Pb(Yb) 操作。 Vb(Xb) 将导致 Xb 为 1,而 Pb(Yb) 将导致 Yb 的值递减。

情况1:如果Yb的值为0,则为-1,进入等待并被阻塞。共有2个进程将访问共享资源(根据信号量,最多3个进程可以访问共享资源)和值s is -1 表示只有 1 个进程在等待资源,而刚才,有一个进程被阻塞了。所以它仍然是真的。

情况2:如果Yb的值为1,则为0。 共有3个进程将访问共享资源(根据计数信号量,最多2个进程可以访问共享资源)并且s的值为-1表示只有1个进程将在等待为资源,但没有进程等待资源。所以它是假的。

参见 https://www.geeksforgeeks.org/operating-systems-set-10/ 的问题 2

此解决方案由Nitika Bansal 提供

这个问题的测验