一、问题描述
二、哲学家 i 的进程描述(可能引起死锁)
三、死锁分析
1. 什么情况下会发生死锁
假如五位哲学家同时饥饿,并且都拿起自己左边的筷子,就会使五个 chopstick[i] 信号量变为0,当它们再试图去拿自己右边的筷子时,都会由于无筷子可拿而无限地等待。
2. 避免死锁的几种解决办法
① 至多同时允许四位哲学家去拿自己左边的筷子,这样就可保证最终至少有一位哲学家能够进餐,并且他用完之后会释放两个筷子,从而使其他哲学家也能够进餐。图解如下:
② 仅当哲学家的左、右筷子均可用时,才允许他拿起两个筷子进餐。(这也是比较好理解的,既然你只有一只筷子可用,就算拿了也吃不成,为啥要拿呢,浪费资源)
③ 非对称解决方法
规定奇数号的哲学家必须先拿左边的筷子,再拿右边的筷子;偶数号的则相反。图解如下: