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+1)mod n;
signal(m);
signal(f);
2)生產者等待消費者情況
假設的時間片輪轉順序如下
produce;
wait(e);
wait(m);
buffer(in):=nexp;
wait(f);
wait(m);
nextc:=buffer(out);
in:=(in+1)mod n;
signal(m);
signal(f);
out:=(out+1) mod n;
signal(m);
signal(e);
consume;
2. 哲學家進餐問題
五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五隻碗和五隻筷子,他們的生活方式是交替地進行思考和進餐。平時,乙個哲學家進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐。進餐畢,放下筷子繼續思考。
1)記錄型訊號量解決哲學家進餐問題
筷子是臨界資源,在一段時間內只允許乙個哲學家使用。為實現對筷子的互斥使用,用乙個訊號量表示乙隻筷子,五個訊號量構成訊號量陣列。
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 :
repeat
swait(l, 1, 1);
swait(mx, 1, 0);
… 讀操作;
…ssignal(l, 1);
until false;
writer :
repeat
swait(mx, 1, 1; l,rn,0);
寫操作;
ssignal(mx, 1);
until false;
經典同步問題
生產者 消費者問題 互斥 同步 哲學家就餐問題 互斥 無論生產者 消費者使用緩衝池時應保證互斥使用 互斥訊號量mutex 生產者和消費者間交叉有序 有序的控制最根源在產品數量上。設定兩個訊號量 分別針對生產者 消費者設定不同的訊號量,empty和full分別表示緩衝池中空緩衝池和滿緩衝池 即產品 的...
2 4經典同步問題
1.生產者消費者問題 1 empty full兩者有天然的數量關係,在pv控制下值不斷變化,但在值等於0的點上是控制順序的關鍵 2 檢查 每個程式中用於實現互斥的wait mutex 和signal mutex 必須成對地出現。控制順序的訊號量empty和full的wait和signal操作,成對地...
經典程序同步問題
文章出處 http heikediguo2005.blog.163.com blog static 2211971200910254235533 依據訊號量與程序的關係,我們可把程序中使訊號量分成私用訊號量和公用訊號量。私有訊號量是指只與制約程序和被制約程序有關的訊號量 公用訊號量是指與一組併發程序...