天天看點

【OS筆記 19】經典同步問題——哲學家就餐問題(信号量解決方案)

一、問題描述

【OS筆記 19】經典同步問題——哲學家就餐問題(信号量解決方案)

二、哲學家 i 的程序描述(可能引起死鎖)

【OS筆記 19】經典同步問題——哲學家就餐問題(信号量解決方案)

三、死鎖分析

1. 什麼情況下會發生死鎖

假如五位哲學家同時饑餓,并且都拿起自己左邊的筷子,就會使五個 chopstick[i] 信号量變為0,當它們再試圖去拿自己右邊的筷子時,都會由于無筷子可拿而無限地等待。

2. 避免死鎖的幾種解決辦法

① 至多同時允許四位哲學家去拿自己左邊的筷子,這樣就可保證最終至少有一位哲學家能夠進餐,并且他用完之後會釋放兩個筷子,進而使其他哲學家也能夠進餐。圖解如下:

【OS筆記 19】經典同步問題——哲學家就餐問題(信号量解決方案)

② 僅當哲學家的左、右筷子均可用時,才允許他拿起兩個筷子進餐。(這也是比較好了解的,既然你隻有一隻筷子可用,就算拿了也吃不成,為啥要拿呢,浪費資源)

③ 非對稱解決方法

規定奇數号的哲學家必須先拿左邊的筷子,再拿右邊的筷子;偶數号的則相反。圖解如下:

【OS筆記 19】經典同步問題——哲學家就餐問題(信号量解決方案)

繼續閱讀