作業系統經典同步問題

2021-08-29 05:37:14 字數 2135 閱讀 2853

經典同步問題

一、 生產者—消費者問題

分析:(1)無論生產者、消費者使用緩衝池時應保證互斥使用(互斥訊號量mutex )

(2)生產者和消費者間交叉有序:

a.有序的控制最根源在產品數量上。

b.設定兩個訊號量:

分別針對生產者、消費者設定不同的訊號量,empty和full分別表示緩衝池中空緩衝池和滿緩衝池(即產品)的數量。

生產者:

repeat

produce an item in nexp;

wait(empty);

wait(mutex);

buffer(in):=nexp;

in:=(in+1) mod n;

signal(mutex);

signal(full);

until false;

消費者:

repeat

wait(full);

wait(mutex);

nextc:=buffer(out);

out:=(out+1) mod n;

signal(mutex);

signal(empty);

consume the item in nexc;

until false;

總結:

1.每個程式中用於實現互斥的wait(mutex)和signal(mutex)必須成對地出現。

2.控制順序的訊號量empty和full的wait和signal操作,成對地出現在不同的程序中

3.在每個程式中的多個wait操作順序不能顛倒。且應先執行對資源訊號量的wait操作,再執行對互斥訊號量的wait操作,否則可能引起程序死鎖。

4.模擬交替執行過程,檢查控制是否正確。

二、哲學家就餐問題

semaphore kuaizi[5]=;

semaphore r=4;

void philosopher(int i)

}

方法二:僅當哲學家的左右兩隻筷子均可用時,才允許他拿起筷子進餐。—採用and訊號量。

semaphore kuaizi[5]=;

void philosopher(int i)

}

方法三:奇數號哲學家先拿他左邊的筷子,然後再去拿右邊的筷子;偶數號哲學家則相反。

semaphore kuaizi[5]=;

void philosopher(int i)

else

}}

三、讀寫者問題

分析:1、乙個資料檔案被多個程序共享。reader程序只要求讀檔案,writer程序要求寫入內容。

2、合理的同步關係是:多個讀程序可同時讀;writer程序與任何其他程序(包括reader程序或其他writer程序)不允許同時訪問檔案。

讀者:

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

寫者:

寫者操作要和其他的都互斥,所以必要判斷互斥訊號量。

只有第乙個讀程序進行互斥判斷;只要有乙個「讀程序」在讀就不釋放,「寫程序」就不能寫。(一種讀者優先的方式)

repeat

wait(wmutex);

寫入檔案;

signal(wmutex);

until false;

作業系統 程序同步經典問題

問題描述 使用乙個緩衝區來儲存物品,只有緩衝區沒有滿,生產者才可以放入物品 只有緩衝區不為空,消費者才可以拿走物品。因為緩衝區屬於臨界資源,因此需要使用乙個互斥量 mutex 來控制對緩衝區的互斥訪問。為了同步生產者和消費者的行為,需要記錄緩衝區中物品的數量。數量可以使用訊號量來進行統計,這裡需要使...

作業系統中的經典同步問題

semaphore full 0 滿衝存數目 semaphore empty n 空衝存數目 semaphore mutex 1 對有界緩衝 producer consumer 其中p full p empty 與p mutex 的順序不能顛倒,必須先對資源訊號量進行p操作,再對互斥訊號量進行p操作...

作業系統 程序管理之經典同步問題

生產消費者模型 多生產者多消費者模型 單生產者多消費者模型 哲學家進餐 p 程序需向互斥緩衝區進行寫操作,而c 程序從互斥緩衝區進行取操作。分析 p和c互斥訪問同一臨界資源,需設定mutex 1 p和c相互同步,p提供產品給c,而c提供空間給p semaphore mutex 1,empty n,p...