天天看點

信号量和PV操作

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

   

}

繼續閱讀