重新定义P操作:    P(s):    S=S-1;    if s<0 then    {将本进程插入相应等待队列的队首};    V操作的定义不变。    使用上述定义的信号量操作。现有n个进程竞争进入一个临界区,需要使用(24),并保证进程能够以正

admin2009-02-15  49

问题 重新定义P操作:    P(s):    S=S-1;    if s<0 then    {将本进程插入相应等待队列的队首};    V操作的定义不变。    使用上述定义的信号量操作。现有n个进程竞争进入一个临界区,需要使用(24),并保证进程能够以正常的次序公平地进入临界区。

选项 A、1个信号量,初值为1
B、2个信号量,初值分别为1,0
C、n-1个信号量,初值均为1
D、n/2个信号量,初值均为1

答案C

解析 本题考查的是信号量,P、V操作,队列等多方面的概念及其运用。
   回顾正常定义的P、V操作:
   P(s):
   s=s-1;
   if s<0  then
   {将本进程插入相应等待队列的队尾};
   V(s):
   s=s+1;
   if s≤0 then
   {将本进程插入就绪队列,唤醒相应等待队列的队首进程}:
   显然,这样可以保证在多个进程竞争进入临界区时,能保证按先等待、先唤醒的次序进入临界区。
   但是,根据新的P操作定义(V操作定义不变),这时唤醒将以后进先出的次序进行。因此为了保证正常次序,每个等待队列上等待的元素不能超过两个,否则必定会产生不公平现象。
   根据题意,有n个进程竞争进入一个临界区,考虑临界区的互斥性,只能有一个进程进入,其余进程将进入等待队列。考虑公平性,就需要n-1个队列,也就是n-1个信号量,初值均为1。当n个进程到来时,只有1个进程进入临界区,其他进程分别进入n-1个队列等待,每队一个进程。在队列Si上等待的进程被唤醒,就将进入队列Si+1,上等待,依次下去,直到进入临界区。
   这时竞争进程流程见下页右侧图。
转载请注明原文地址:https://kaotiyun.com/show/8RxZ777K
0

相关试题推荐
最新回复(0)