經典同步問題

2021-09-02 10:51:38 字數 1477 閱讀 9747

生產者—消費者問題

 互斥、同步

哲學家就餐問題

 互斥

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

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

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

 設定兩個訊號量:

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

偽**如下:

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

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

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

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

哲學家進餐問題

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

可見:相鄰兩位不能同時進餐;最多只能有兩人同時進餐。

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

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

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

4) 所有訊號量均被初始化為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;

當哲學家飢餓時,總是先拿左邊的筷子,再拿右邊的筷子。

當哲學家進餐畢,先放下左邊的筷子,再放下右邊的筷子。

經典同步問題

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 ...

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 依據訊號量與程序的關係,我們可把程序中使訊號量分成私用訊號量和公用訊號量。私有訊號量是指只與制約程序和被制約程序有關的訊號量 公用訊號量是指與一組併發程序...