哲學家進餐問題

2021-09-12 22:22:34 字數 904 閱讀 8121

一張圓桌上坐著5名哲學家,每兩個哲學家之間的桌上擺一根筷子,桌子的中間是一碗公尺飯,如圖所示。

哲學家們傾注畢生精力用於思考和進餐,哲學家在思考時,並不影響他人。只有當哲學家飢餓的時候,才試圖拿起左、 右兩根筷子(一根一根地拿起)。如果筷子已在他人手上,則需等待。

飢餓的哲學家只有同時拿到了兩根筷子才可以開始進餐,當進餐完畢後,放下筷子繼續思考。

}通過訊號量 mutex對 eat() 之前的取左側和右側筷子的操作進行保護, 使之成為乙個原子操作, 這樣可以防止死鎖的出現。

semaphore mutex = 1 ;

semaphore chopstick[5]=;

void philosopher(int i)

}

這個**有個問題就是同一時間只能有乙個哲學家取筷子,效率比較低。但是可以防止死鎖。

按此規定,將是 1,4 號哲學家競爭 4 號筷子,2,3 號哲學家競爭 2 號筷子。即五個哲學家都競爭偶數號筷子,獲得後,再去競爭奇數號筷子,最後總會有乙個哲學家能獲得兩支筷子而進餐。

而申請不到的哲學家進入阻塞等待佇列,根據 fifo 原則, 則先申請的哲學家會較先可以飯, 因此不會出現餓死的哲學家。

semaphore chopstick[5]=;

void philosopher(int i)

else}}

參考:

哲學家進餐問題

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

哲學家進餐問題

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

python 哲學家進餐問題

import threading class diningphilosophers def init self self.cv threading.condition 字典物件,表示每個哲學家0,1,2,3,4的狀態,false表示未吃飯 self.d for i in range 5 self.d...