程序管理 哲學家進餐問題

2021-09-27 00:26:36 字數 594 閱讀 4256

semaphore mutex=

1;//互斥地取筷子

pi (

)}

該演算法存在一下問題:當5名哲學家都想要進餐並分別拿起左邊的筷子時,筷子已經被拿光,等到他們再想拿右邊的筷子時,就會被阻塞,因此出現了死鎖。

為了防止死鎖的發生,可對哲學家程序施加一些限制條件。有以下幾種方法:

最多允許四個哲學家同時進餐。這樣可以保證至少有哲學家是可以拿到左右兩隻筷子的,破壞了」迴圈等待「條件

要求奇數號哲學家先拿左邊的筷子,然後再拿右邊的筷子,而偶數號哲學家剛好相反。用這種方法可以保證如果相鄰的兩個奇偶號哲學家都想吃飯,那麼只會有其中乙個可以拿起第一只筷子,另乙個會直接阻塞。這就避免了占有一支後再等待另乙隻的情況,破壞了」迴圈等待「條件

僅當乙個哲學家左右兩支筷子都可用時才允許他抓起筷子,破壞了」請求和保持「條件

我們選擇第三種方法進行實現

semaphore mutex=

1;//互斥地取筷子

pi (

)}

哲學家進餐問題

哲學家進餐問題 一 問題 5個哲學家圍坐在乙個圓桌上,每兩個哲學家之間都有乙隻筷子,哲學家平時進行思考,只有當他們飢餓時,才拿起筷子吃飯。規定每個哲學家只能先取其左邊筷子,然後取其右邊筷子,然後才可以吃飯。二 分析 每乙隻筷子都是乙個臨界資源,設定5個互斥訊號量。semaphore stcik 5 ...

哲學家進餐問題

一張圓桌上坐著5名哲學家,每兩個哲學家之間的桌上擺一根筷子,桌子的中間是一碗公尺飯,如圖所示。哲學家們傾注畢生精力用於思考和進餐,哲學家在思考時,並不影響他人。只有當哲學家飢餓的時候,才試圖拿起左 右兩根筷子 一根一根地拿起 如果筷子已在他人手上,則需等待。飢餓的哲學家只有同時拿到了兩根筷子才可以開...

哲學家進餐問題

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