信號量和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 | 表示等待數列的進程數。