`
yanlijun250
  • 浏览: 750097 次
文章分类
社区版块
存档分类
最新评论

多线程练习----哲学家问题

 
阅读更多

哲学家进餐问题

在多线程中如何避免死锁。

<wbr></wbr>

问题描述:有五位哲学家围绕着餐桌坐,每一位哲学家要么思考

要么等待,要么吃饭。为了吃饭,哲学家必须拿起两支筷子(分

别放于左右两端)不幸的是,筷子的数量和哲学家相等,所以每

只筷子必须由两位哲学家共享

<wbr></wbr>

一、使用数组来跟踪一个哲学家的的状态:吃饭,思考或是试图拿起筷子,规定一个哲学家只有在两个邻居都不再进餐时才允许转移到进餐状态。这种方法可以使系统获得最大的并行度,即最多允许两个哲学家同时进餐。
二、给每个哲学家编号,规定奇数号的哲学家先拿他的左筷子,然后再去拿他的右筷子;而偶数号的哲学家则相反。这样总可以保证至少有一个哲学家可以进餐。

一般都使用第二种方法,高效而简单。


普通解法,会死锁,不过还得等好一会。电脑速度这么快,也差不多等了五分钟以后才死锁。但是不管等多久死锁,理论上讲,死锁是早晚的事,所以还是防着点好。




可见,死锁的时候Process0——4都是waiting...状态

略加修改就不会产生死锁了。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics