📜  门| GATE CS 2008 |第63章

📅  最后修改于: 2021-06-29 01:51:44             🧑  作者: 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的初始值分别是

(A) 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设为零。

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

情况1:如果Yb的值为0,它将为-1,它将进入等待状态并被阻塞。总共2个进程将访问共享资源(根据计数信号量,最多3个进程可以访问共享资源)和的值s为-1意味着只有1个进程将在等待资源,而现在,一个进程被阻塞了。所以这仍然是事实。

情况2:如果Yb的值为1,则它将为0。总共3个进程将访问共享资源(根据计数信号量,最大2个进程可以访问共享资源),而s的值为-1意味着仅1个进程将在等待需要资源,但是没有等待资源的进程。所以这是错误的。

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

该解决方案由Nitika Bansal提供

这个问题的测验