信號量和PV操作

信號量和PV操作

信號量包括一個整數值和一個等待數列.S.queue,信號量只能通過兩個原語P,V操作來訪問它,信號量的定義:

 Struct semaphore{

      Int value;

      Struct PCB *queue;

}

P原語所執行的操作可用wait(s)來表示:

Void wait(semaphore s)

{

  s.value=s.value-1;

  if(s.value<0)

     block(s.queue); //進程阻塞,並將其投入等待數列s.queue

 }

V原語所執行的操作可用下面的函數siganl(s)來表示:

Void signal(semaphore s)

{   

   S.value=s.value+1;

   If(s.value<=0)

     Wackup(s.queue);//喚醒阻塞進程,將其從等待隊列s.queue取出,投入就緒隊列

}

信號量的物理意義:信號量的初值s.value表示系統中某種資源的數目,因而又稱爲資源信號量

P操作意味着進程請求一個資源,因此描述爲s.value=value-1;

V操作意味進程釋放一個資源,因此描述爲s.value=s.value+1

s.value<0時,| s.value | 表示等待數列的進程數。

發佈了36 篇原創文章 · 獲贊 38 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章