1.生產者——消費者問題
無論生產者、消費者使用緩衝池時應保證互斥使用(互斥訊號量mutex )
生產者和消費者間交叉有序:
有序的控制最根源在產品數量上。
設定兩個訊號量:分別針對生產者、消費者設定不同的訊號量,empty和full分別表示緩衝池中空緩衝池和滿緩衝池(即產品)的數量。
變數和訊號量
buffer: array [ 0, …, n-1] of item;
in, out: integer :=0, 0;
//不使用counter變數,而是用訊號量
var mutex, empty, full: semaphore :=1, n, 0;
producer :
repeat
… produce an item in nexp;
…wait(empty);
wait(mutex);
buffer(in):=nexp;
in:=(in+1) mod n;
singal(mutex);
singal(empty);
until false;
consumer :
repeat
wait(full);
wait(mutex);
nextc:=buffer(out);
out:=(out+1) mod n;
signal(mutex);
signal(empty);
consume the item in nexc;
until false;
檢查:
每個程式中用於實現互斥的wait(mutex)和signal(mutex)必須成對地出現。
控制順序的訊號量empty和full的wait和signal操作,成對地出現在不同的程序中,在每個程式中的多個wait操作順序不能顛倒。且應先執行對資源訊號量的wait操作,再執行對互斥訊號量的wait操作,否則可能引起程序死鎖。
模擬交替執行過程,檢查控制是否正確。
2.哲學家進餐問題
題目描述:
五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五隻碗和五隻筷子,他們的生活方式是交替地進行思考和進餐。平時,乙個哲學家進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐。進餐畢,放下筷子繼續思考。
可見:相鄰兩位不能同時進餐;最多只能有兩人同時進餐。
記錄型訊號量解決哲學家進餐問題
var chopstick: array [0, …, 4] of semaphore;
//所有訊號量均被初始化為1。
//第i 位哲學家的活動可描述為:
repeat
wait(chopstick[ i ]);
wait(chopstick[ ( i +1) mod 5] );
…eat;
… signal(chopstick[ i ]);
signal(chopstick[ ( i +1) mod 5] );
… think;
until false;
3.讀者——寫者問題
情景:乙個資料檔案被多個程序共享。reader程序只要求讀檔案,writer程序要求寫入內容。
合理的同步關係是:
多個讀程序可同時讀;
writer程序與任何其他程序(包括reader程序或其他writer程序)不允許同時訪問檔案。
讀者reader:
begin
repeat
wait(rmutex);
if readcount=0 then
wait(wmutex);
readcount :=readcount +1;
signal(rmutex);
… perform read operation;
…wait(rmutex);
readcount :=readcount -1;
if readcount=0 then
signal(wmutex);
signal(rmutex);
until false;
end;
作業系統 程序同步經典問題
問題描述 使用乙個緩衝區來儲存物品,只有緩衝區沒有滿,生產者才可以放入物品 只有緩衝區不為空,消費者才可以拿走物品。因為緩衝區屬於臨界資源,因此需要使用乙個互斥量 mutex 來控制對緩衝區的互斥訪問。為了同步生產者和消費者的行為,需要記錄緩衝區中物品的數量。數量可以使用訊號量來進行統計,這裡需要使...
作業系統 第六章 程序同步
實驗 經典同步問題之讀者寫者問題 關於前面討論過的共享記憶體問題,為了讓它能夠儲存buffersize個元素,我們修改其 如下。生產者 while true 消費者 while true 乍一看,消費者和生產者 都正確,但是當這兩段 併發執行的時候就有問題了。併發時,兩個程序會同時操作counter...
作業系統 程序同步
臨界資源 critical resouce 臨界區 critical section 硬體同步機制 訊號量機制 訊號量的應用 管程3使用多道批處理系統不僅能有效的改善資源的利用率,還可以顯著地提高系統的吞吐量,但同時會使系統變得更加複雜,會使程式的執行結果存在不確定性。所以必須引入程序同步機制從而保...