哲學家進餐問題是荷蘭學者Dijkstra 提出的經典問題之一,它是一個信號量機制問題的應用,在操作系統文化史上具有非常重要的地位。對該問題的剖析有助于學生深刻地理解計算機系統中的資源共享、進程同步、死鎖等問題,并能熟練地應用信號量來解決生活中的控制流程,即將生活中的控制流程用形式化的方式表達出來。
假設有5個哲學家,他們花費一生中的時光思考和吃飯。這些哲學家共用一個圓桌,每個哲學家都有一把椅子。在桌子中央是一碗通心面,在桌子上放著5只筷子。(如圖所示)當一個哲學家思考時,他與其他同事不交互。時而,哲學家會感到饑餓,并試圖拿起與他相近的兩只筷子(他與鄰近左、右之間的筷子)。一個哲學家一次只能拿起一只筷子。顯然,他不能從其他哲學家手里拿走筷子。當一個饑餓的哲學家同時有兩只筷子時,他就不能不用釋放他的筷子而自己吃了。當吃完后,他會放下兩只筷子,并再次開始思考。
規定奇數號哲學家先拿他左邊的筷子,然后再去拿右邊的筷子;而偶數號哲學家則相反。按此規定,將是1、 2號哲學家競爭1號筷子;3、4號哲學家競爭3號筷子。即五位哲學家都先競爭奇數號筷子,獲得后,再去競爭偶數號筷子,最后總會有一位哲學家能獲得兩只筷子而進餐。
標簽:
Dijkstra
家
信號量
地理
上傳時間:
2013-12-10
上傳用戶:zhangzhenyu