您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java多线程 哲学家就餐死锁问题四种解决方案

java持续实践 发布时间:2020-09-12 16:51:17 ,浏览量:2

文章目录
      • 哲学家就餐死锁问题四种解决方案
        • 服务员检查 (避免策略)
      • 改变一个哲学家拿筷子的顺序 (避免策略 代码演示)
        • 餐票 (避免策略)
        • 领导调节策略 (检测与恢复策略)

哲学家就餐死锁问题四种解决方案

此文中演示了哲学家就餐问题的死锁代码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);
            }

再次运行程序, 可以看到没有发生死锁了.

餐票 (避免策略)

餐票方案是指, 如果有五个哲学家 , 那么只给出四个餐票, 总会有一个哲学家是吃不上饭的, 这样也就避免了死锁. 当某个哲学家吃完饭后, 再把餐票还回去.

领导调节策略 (检测与恢复策略)

领导调节策略指的是, 有领导定期的巡视, 如果发现出现了死锁, 那么就会剥夺某一个哲学家手中的筷子 , 释放锁资源, 破坏死锁的四个条件中的不剥夺条件.

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0382s