首页 > 试题广场 >

若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程

[单选题]
若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是()。
  • 3,2,1,0
  • 3,2,1,0,-1
  • 4,3,2,1,0
  • 2,1,0,-1,-2
当信号量是负数的时候表示有进程在等待,是负几就代表有几个进程在等待,因为最多有一个进程在等待,所以信号量最小只能是-1
发表于 2016-03-25 15:20:22 回复(0)
允许3个进程同时进入程序段,因此信号量S设为3.
这里的信号量P操作应该是等待时,将其挂到信号量等待队列中,因此可以为负数。先对信号量执行减1操作,如果为负数,将进程添加到信号量等待队列,并挂起进程。
本题中,当3个线程进入程序段后,S=0;第4个进程再想进入时,S=-1,因此取值范围是[3,-1](整数)。
void P(sem S)
{
    S--;
    if(S < 0)
        add to waiting list of S;
    block();
}
发表于 2015-08-04 11:29:38 回复(0)
A
“信号量s是具有非负整数值的全局变量”,只有两个操作P(s)和V(s):
P(s):如果s非零,那么P将s减1,并且立即返回。如果s为零,那么就挂起这个线程,直到s变为非零,而一个V操作会重启这个线程。在重启之后,P操作将s减1,并将控制返回给调用者。
发表于 2015-08-24 18:11:11 回复(0)
当信号量是负数的时候表示有进程在等待,是负几就代表有几个进程在等待,因为最多有一个进程在等待,所以信号量最小只能是-1
发表于 2017-04-20 21:15:58 回复(0)