信号量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上的等待的程序;
}
}