2 4經典同步問題

2021-08-28 11:45:41 字數 1991 閱讀 6971

1.生產者消費者問題

1)empty、full兩者有天然的數量關係,在pv控制下值不斷變化,但在值等於0的點上是控制順序的關鍵

2)檢查:

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

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

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

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

3)模擬交叉執行:

兩個生產者同時的情況

假設的時間片輪轉順序如下

produce;

produce;

wait(e);

wait(m);

buffer(in):=nexp;

wait(e);

wait(m);

buffer(in):=nexp;

in:=(in+1)mod n;

signal(m);

signal(f);

in:=(in+1)mod n;

signal(m);

signal(f);

4)and訊號量的方式

consumer :

repeat

swait(full, mutex);

nextc:=buffer(out);

out:=(out+1) mod n;

ssignal(mutex, empty);

consume the item in nexc;

until false;

2.哲學家就餐問題

五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五隻碗和五隻筷子,他們的生活方式是交替地進行思考和進餐。平時,乙個哲學家進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐。進餐畢,放下筷子繼續思考。

1)記錄型訊號量解決哲學家進餐問題

筷子是臨界資源,在一段時間內只允許乙個哲學家使用。為實現對筷子的互斥使用,用乙個訊號量表示乙隻筷子,五個訊號量構成訊號量陣列。

var chopstick: array [0, …, 4] of semaphore;

所有訊號量均被初始化為1。

2)就餐死鎖問題

假如五位哲學家同時飢餓而各自拿起左邊的筷子時,就會使五個訊號量chopstick均為0,當他們再試圖去拿右邊的筷子時,都將因無筷子可拿而無限等待。

3)解決方法:

1.數量控制 假如五位哲學家同時飢餓而各自拿起左邊的筷子時,就會使五個訊號量chopstick均為0,當他們再試圖去拿右邊的筷子時,都將因無筷子可拿而無限等待。

2.一刀切:

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

3.if程式設計控制

規定奇數號哲學家先拿他左邊的筷子,然後再去拿右邊的筷子;偶數號哲學家則相反。保證總會有乙個哲學家能同時獲得兩隻筷子而進餐

3.讀者寫者問題

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

合理的同步關係是:

多個讀程序可同時讀;

writer程序與任何其他程序(包括reader程序或其他writer程序)不允許同時訪問檔案。

寫者操作要和其他的都互斥,所以必要判斷互斥訊號量,沒有變化:

writer :

repeat

wait(wmutex);

寫入檔案;

signal(wmutex);

until false;

只有第乙個讀程序進行互斥判斷;

只要有乙個「讀程序」在讀就不釋放,「寫程序」就不能寫。(一種讀者優先的方式)

4.

單行問題

同向不互斥,異向互斥

船閘問題

同閘航道不互斥,不同閘的互斥

經典同步問題

1.生產者 消費者問題 1 兩個生產者同時的情況 假設的時間片輪轉順序如下 produce produce wait e wait m buffer in nexp wait e wait m buffer in nexp in in 1 mod n signal m signal f in in ...

經典同步問題

生產者 消費者問題 互斥 同步 哲學家就餐問題 互斥 無論生產者 消費者使用緩衝池時應保證互斥使用 互斥訊號量mutex 生產者和消費者間交叉有序 有序的控制最根源在產品數量上。設定兩個訊號量 分別針對生產者 消費者設定不同的訊號量,empty和full分別表示緩衝池中空緩衝池和滿緩衝池 即產品 的...

經典程序同步問題

文章出處 http heikediguo2005.blog.163.com blog static 2211971200910254235533 依據訊號量與程序的關係,我們可把程序中使訊號量分成私用訊號量和公用訊號量。私有訊號量是指只與制約程序和被制約程序有關的訊號量 公用訊號量是指與一組併發程序...