对信号量S进行P操作,记为P(S),处理过程如下
--S.Q; //表示申请一个资源
if(S.Q<0) //表示没有空闲资源
{
调用进程进入等待队列S.Q;
阻塞调用进程;
}
对信号量S进行V操作,记为V(S),处理过程如下
++S.Q; //表示释放一个资源
if(S.Q<=0) //表示有进程处于阻塞状态
{
从等待队列S.Q中取出一个进程P;
进程P进入就绪队列;
}
对信号量S进行P操作,记为P(S),处理过程如下
--S.Q; //表示申请一个资源
if(S.Q<0) //表示没有空闲资源
{
调用进程进入等待队列S.Q;
阻塞调用进程;
}
对信号量S进行V操作,记为V(S),处理过程如下
++S.Q; //表示释放一个资源
if(S.Q<=0) //表示有进程处于阻塞状态
{
从等待队列S.Q中取出一个进程P;
进程P进入就绪队列;
}