1. 程式人生 > >淺談兩種方法實現程序互斥的原理

淺談兩種方法實現程序互斥的原理

對臨界資源的使用通過量種方法實現:

管程機制和訊號量機制(記錄性訊號量和AND訊號量);

記錄性訊號量機制:

在記錄性訊號機制裡面有S.value :記錄的是資源的訊號的量,通過去驗證每次這個值是否大於0,來判斷是否讓程序來使用此資源,但是,一旦這個值s.value=1就允許一個程序訪問該資源。從而實現了程序的互斥。

這種機制用於各個程序對一個資源的共享。

AND型訊號的機制:

這是好幾個程序對好幾個共享資源的一個實現的方法。

他的核心機制:就是將一個程序中執行過程中的所有需要的資源,都一次性全部分配給程序。待程序使用完成後,在一併的去釋放。

但是訊號量機制:每個要訪問臨界資源的程序,都要自備wait ()

signal(),這樣就使得所有的操作都分散在各個程序裡面,會給系統的管理,帶來很到的麻煩。一旦一個操作的使用不當,就會導致系統的死鎖。所以就使用了一種新的方法就是管程;

管程機制

利用共享資料結構抽想的表示系統的共享資源。把對該共享資料的操作定義為一組過程。程序對共享資源的操作,就是這組過程對共享資料的一個操作。

而這組過程組成了一個資源程式和共享的資料結構,構成了一個作業系統的資源管理模組。——管程

管程由四部分組成:

管程名,區域性於管程內部的共享資料結構的說明,對該資料結構的一組操作,對區域性於管程內部的共享資料設定初始化的語句。

區域性於管程內部的資料結構,只允許管程內部的過程進行訪問,其實說實話管程就向圍牆,把共享的資料和對他的操作包圍起來,當程序訪問臨界資源的時候,就會經過管程,一次只允許一個程序進入管程,從而實現了程序的互斥。

當程序在訪問臨界的資源的時候,先是呼叫管程,一旦管程正在被其他的程序所呼叫,管程呼叫wait ()將自己插入到佇列中,一旦當前的管程被是釋放。其他程序就可以使用這個管程了,所以說這個過程程序的等待,其實就是管程的等待。