文章目录
哲学家就餐死锁问题四种解决方案
- 哲学家就餐死锁问题四种解决方案
- 服务员检查 (避免策略)
- 改变一个哲学家拿筷子的顺序 (避免策略 代码演示)
- 餐票 (避免策略)
- 领导调节策略 (检测与恢复策略)
此文中演示了哲学家就餐问题的死锁代码demo . 下面提供四种解决方案 https://javaweixin6.blog.csdn.net/article/details/108541931
服务员检查 (避免策略)在哲学家去拿筷子的时候, 由服务员去判断是否会造成五个人都拿着左边筷子的情况, 如果会, 那么服务员就让某个哲学家等一会再拿左边的筷子, 避免了死锁的情况
改变一个哲学家拿筷子的顺序 (避免策略 代码演示)此策略没有额外的服务员 . 而是 某一个哲学家不是从左边拿筷子, 是从右边拿筷子, 这样就避免了死锁的环路. 例如把此文中的代码 https://javaweixin6.blog.csdn.net/article/details/108541931
做如下的修改, 第一个线程是先拿右边的筷子, 第二个线程先拿左边的筷子
if (i == 0) {
philosophers[i] = new Philosopher(rightChopstick, leftChopstick);
} else {
//初始化哲学家
philosophers[i] = new Philosopher(leftChopstick, rightChopstick);
}
再次运行程序, 可以看到没有发生死锁了.
餐票方案是指, 如果有五个哲学家 , 那么只给出四个餐票, 总会有一个哲学家是吃不上饭的, 这样也就避免了死锁. 当某个哲学家吃完饭后, 再把餐票还回去.
领导调节策略 (检测与恢复策略)领导调节策略指的是, 有领导定期的巡视, 如果发现出现了死锁, 那么就会剥夺某一个哲学家手中的筷子 , 释放锁资源, 破坏死锁的四个条件中的不剥夺条件.