PV原語

PV原語通過操作信號量來處理進程間的同步與互斥的問題。其核心就是一段不可分割不可中斷的程式。 信號量的概念1965年由著名的荷蘭計算機科學家Dijkstra提出,其基本思路是用一種新的變數類型(semaphore)來記錄當前可用資源的數量。有兩種實現方式:1)semaphore的取值必須大於或等於0。0表示當前已沒有空閒資源,而正數表示當前空閒資源的數量;2) semaphore的取值可正可負,負數的絕對值表示正在等待進入臨界區的進程個數。 信號量是由作業系統來維護的,用戶進程只能通過初始化和兩個標準原語(P、V原語)來訪問。初始化可指定一個非負整數,即空閒資源總數。

原語

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

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

三種情況

具體PV原語對信號量的操作可以分為三種情況:

1)把信號量視為一個加鎖標誌位,實現對一個共享變數的互斥訪問。

實現過程:

P(mutex); // mutex的初始值為1 訪問該共享數據;

V(mutex);

非臨界區

2)把信號量視為是某種類型的共享資源的剩餘個數,實現對一類共享資源的訪問。

實現過程:

P(resource); // resource的初始值為該資源的個數N 使用該資源;

V(resource); 非臨界區

3)把信號量作為進程間的同步工具

實現過程:

臨界區C1;

P(S);

V(S);

臨界區C2;

相關詞條

相關搜尋

熱門詞條

聯絡我們