程序同步 互斥 哲學家進餐問題

2021-09-19 01:25:46 字數 596 閱讀 9646

1、問題描述

一張圓桌上有5名哲學家,沒兩個哲學家之間有一根筷子,桌子中間由一碗公尺飯。當哲學家飢餓時會試圖分別拿起左右兩根筷子,如果筷子已在他人手上則需等待。飢餓的哲學家只有拿起兩根筷子才能進餐,吃完後才能放下筷子。

2、問題分析

對哲學家分別編號0,1,2,3,4,對筷子編號0,1,2,3,4。i號哲學家左邊筷子編號為i,右邊編號為(i+1)%5。

(1)方案1

最多允許4個哲學家同時申請進餐,這樣可以保證至少有乙個哲學家有兩根筷子

(2)方案2

要求奇數號的哲學家先拿左邊的筷子,然後拿右邊的筷子,偶數號哲學家相反

semaphore chopstick[5]=;

pi()else

進餐v(chopstick[i]);

v(chopstick[(i+1)%5]);

}}

(3)方案3

僅當哲學家兩邊的筷子都可以拿起的時候才能申請進餐

semaphore chopstick[5]=;

semaphore mutex=1;

pi()

}

經典程序同步問題 哲學家進餐

問題描述 一張圓桌上坐著5名哲學家,每兩名哲學家之間的桌上擺著一根筷子,兩根筷子中間是一碗公尺飯,如圖所示 圖來自於王道作業系統課本 哲學家只會思考和進餐,哲學家在思考時,並不影響其他人。只有當哲學家飢餓時,才試圖拿起左 右兩根筷子 一根一根拿起 若筷子在其他人手上,則需等待。飢餓的哲學家只有同時拿...

經典程序同步問題 哲學家進餐問題

五個哲學家公用一張圓桌,分別坐在周圍的五張桌子上,在圓桌上有五個碗和五隻筷子交叉排列,它們的生活方式是交替的進行思考和進餐.哲學家進行思考時不用筷子,飢餓時取乙隻他兩邊的任意乙隻筷子 預設取左邊的筷子,沒有時取右邊的,都沒有時就取不了 當他有兩隻筷子時就能進餐.進餐後,放下筷子繼續思考.若只有乙隻筷...

哲學家進餐問題

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