信号量s:就是对于进程来说,就是一个资源的数量的,信号量是一个整数,信号量为正数,表示该类的资源可以使用的个数,信号量为0 的时候,表示该资源没有了!但是如果信号量为负的时候,表示该资源的没有,但是还有信号量的绝对值那么多的进程在等待这个资源。
关于信号量的操作:有PV操作。
P操作:P操作是原语操作,P操作在执行的时候,不能被打断的,
P操作的内部过程
void P(Semaphore s)
{
s--;
if(s< 0)
{
wait(s); //进程调用wait进行自我封锁,进入等待状态;
}
}
P操作的含义是将信号量s减少1,如果这时s< 0,表示原先s最多是0,已经没有医院可以用了,因此这使得进程在信号量上等待,自己进入等待的状态。
V操作的内部的表示的过程
void V (Semphore s)
{
s++;
if(s <0)
{
revoke(s);// 该进程担负唤醒在信号量s上的等待的进程;
}
}