天天看點

PV原語 稍微 詳細點的表示方法

PV原語的邊界條件寫的太精簡,是以我稍微詳細點的表示。

PV原語

P原語:P是荷蘭語Proberen(測試)的首字母。為阻塞原語,負責把目前程序由運作狀态轉換為阻塞狀态,直到另一個程序喚醒它。具體操作為:申請一個空閑資源(把信号量減1),若成功,則退出;若失敗,則該程序被阻塞。

V原語:V是荷蘭語Verhogen(增加)的首字母。為喚醒原語,負責把一個被阻塞的程序喚醒,他有一個參數表,存放着等待被喚醒的程序資訊。具體操作為:釋放一個被占用的資源(把信号量加1),如果發現有被阻塞的程序,則選擇一個喚醒。

表示方法

P(S):表示将信号量S的值減一,即S=S-1;如果S>=0,則該程序繼續執行,否則該程序置為等待狀态,排入等待隊列(隊列Q)。

V(S):表示将信号量S的值加一,即S=S+1;如果S>0,則該程序繼續執行,否則釋放隊列(Q)中第一個等待信号量的程序。

我的稍微詳細點表示方法

P(S):表示将信号量S的值減一,即S1= S; S2=S1-1;如果S2>=0,也就是S1>=1,說明有現成的資源直接可以用,不用等!,則該程序繼續執行,否則(也就是S2<0變成負數)該程序置為等待狀态,排入等待隊列(隊列Q)。

V(S):表示将信号量S的值加一,即S1=S; S2=S1+1;如果S2>0,也就是S1>-1也就是S1>=0,也就是說明V操作之前S1不是負數,說明根本不存在等待資源的程序,等待隊列是空的!,則該程序繼續執行,否則(也就是V操作之後釋放了一個資源,又有至少一個正在等待資源的程序,那就去喚醒這個程序)釋放隊列(Q)中第一個等待信号量的程序。

繼續閱讀