一、問題描述
二、哲學家 i 的程序描述(可能引起死鎖)
三、死鎖分析
1. 什麼情況下會發生死鎖
假如五位哲學家同時饑餓,并且都拿起自己左邊的筷子,就會使五個 chopstick[i] 信号量變為0,當它們再試圖去拿自己右邊的筷子時,都會由于無筷子可拿而無限地等待。
2. 避免死鎖的幾種解決辦法
① 至多同時允許四位哲學家去拿自己左邊的筷子,這樣就可保證最終至少有一位哲學家能夠進餐,并且他用完之後會釋放兩個筷子,進而使其他哲學家也能夠進餐。圖解如下:
② 僅當哲學家的左、右筷子均可用時,才允許他拿起兩個筷子進餐。(這也是比較好了解的,既然你隻有一隻筷子可用,就算拿了也吃不成,為啥要拿呢,浪費資源)
③ 非對稱解決方法
規定奇數号的哲學家必須先拿左邊的筷子,再拿右邊的筷子;偶數号的則相反。圖解如下: