死锁问题

  多线程因访问锁资源不当,导致永久挂起,无法继续,程序功能瘫痪


  死锁产生的四个必要条件
    * 四个条件都满足,死锁才会发生,这也是避免死锁问题的重要提示
    1. 请求与保持条件:线程占用自身资源后,还要请求其他线程占用的资源
    2. 互斥条件:锁资源的特性就是互斥性,同一时刻只允许一个线程访问,其他线程访问则被系统挂起
    3. 不可剥夺条件:一个线程占用了资源(lock)后,无法通过外力强制剥夺该资源,只能由占有者自行释放
    4. 循环等待条件:多线程并发,资源有限的情况下,每个单位都在等待相应线程资源

  哲学家就餐问题
    多线程资源有限的情况下,如何合理使用资源


  1,2,3,4,5 假设都为单只筷子

  哲学家行为模式

    就餐:哲学家会先拿左手边的资源再获取右手边的,这个顺序每个哲学家都一样,两个资源都获取到,完成进餐任务

    思考:不做任何事情,不需要任何资源

    * 哲学家行为模式不可预测,随机触发

    死锁现象:哲学家同时进餐,每个人获取左手资源,等待请求右手资源,但是无法获取,产生等待环路,造成死锁现象(永久被挂起)饥饿

    活锁现象:哲学家获取一个资源后,发现另一个被占用,自己无法进餐,礼貌机制触发,释放占用的资源,但是如果五个哲学家行为同步,产生活锁,频繁申请释放资源,最终一直处于饥饿状态

    高权策略:某个哲学家权限最高,他要进餐可以想低权哲学家发送通知,其他哲学家放弃进餐(资源无法有效利用,有效资源被浪费)

    服务者模式: 加入服务者单元,检测记录餐桌上资源占用情况,每个哲学家进餐是,询问服务者是否可以进餐,服务者根据餐桌上的情况进行反馈,在服务者的干预下,多个哲学家可以有序地进餐,资源可以被有效利用

    银行家算法这里暂不介绍,有向了解的读者可以参考这篇文章

死锁和哲学家就餐问题相关推荐

  1. 利用记录型信号量解决不会出现死锁的哲学家就餐问题

    试利用记录性信号量写出一个不会出现死锁的哲学家进餐问题的算法 规定在拿到左侧的筷子后,先检查右面的筷子是否可用.如果不可用,则先放下左侧筷子, 等一段时间再重复整个过程. 分析:当出现以下情形,在某一 ...

  2. 多线程“死锁”之“哲学家就餐”代码实现

    死锁:就是两个或者两个以上的线程相互占用对方的需要的资源,而不进行释放,导致彼此都在等待对方释放资源,产生了无限制的等待的现象. "哲学家就餐"的问题不在赘述,可以自行百度或者Go ...

  3. java中哲学家就餐死锁_哲学家就餐问题与死锁总结

    死锁的四个条件: (1) 互斥条件:一个资源每次只能被一个进程使用. (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放. (3) 不剥夺条件:进程已获得的资源,在末使用完之前 ...

  4. 哲学家就餐与死锁问题,死锁产生的条件以及解决方案

    请结合经典案例-哲学家就餐,来谈谈你对死锁的理解,以及怎么预防和解除死锁? 哲学家就餐 描述:在一张圆桌上,有n个哲学家,n支筷子,他们的生活方式只是交替地进行思考和进餐,饥饿时便试图取其左.右最靠近 ...

  5. 哲学家就餐问题--信号量和互斥量预防死锁

    哲学家就餐问题可以采取预防死锁的方案,就是使用互斥量和信号量锁定资源. 互斥量: 对资源进行锁定的意思就是说,当一个哲学家使用叉子的时候,他首先要先把叉子锁定,然后,拿起来.这个时候如果别的哲学家也来 ...

  6. 哲学家就餐(避免死锁)(多进程版)

    哲学家就餐(避免死锁)(多进程版) 哲学家就餐利用信号量在多进程之间实现 下面展示一些代码片段 #include <stdio.h> #include <unistd.h> # ...

  7. 哲学家就餐问题(如何避免死锁)(多线程版)

    哲学家就餐问题 多线程编程中,常常会遇到线程间访问共享资源的问题,如果处理不当则会发生死锁,某一个线程可能永远访问不到共享资源. 为了避免死锁的发生,提出哲学家就餐问题. 下面展示一些代码片段 #in ...

  8. Java多线程学习四十二:有哪些解决死锁问题的策略和哲学家就餐问题

    线上发生死锁应该怎么办 如果线上环境发生了死锁,那么其实不良后果就已经造成了,修复死锁的最好时机在于"防患于未然",而不是事后补救.就好比发生火灾时,一旦着了大火,想要不造成损失去 ...

  9. Thinking in Java---从哲学家就餐问题看死锁现象

    我们知道一个对象可以有synchronized方法或其他形式的加锁机制来防止别的线程在互斥还没释放的时候就访问这个对象.而且我们知道线程是会变成阻塞状态的(挂起),所以有时候就会发生死锁的情况:某个任 ...

  10. 哲学家就餐问题的三种避免死锁的解法(PV操作)

    哲学家就餐问题的三种避免死锁的解法(PV操作) 方案一:最多允许有四位哲学家同时去拿左边的筷子,然后再拿右边的筷子,最终保证至少有一位哲学家能够进餐,并在就餐完毕时同时释放他用过的两只筷子,从而使更多 ...

最新文章

  1. mysql for循环_基于Swoole扩展开发异步高性能的MySQL代理服务器
  2. while loading shared libraries: libmysqlclient....
  3. BZOJ1041:[HAOI2008]圆上的整点(数论)
  4. 【Docker】 安装 Docker
  5. android实现计算器功能吗,安卓实现一个计算器的功能
  6. 数据库的几个基本概念
  7. 关于Ext.grid.EditorGridPanel使用中遇到的问题
  8. Python matplot工具包之一的 mpl_toolkits绘制属于你的世界地图
  9. 使用活字格制作企业办公用品管理软件
  10. 企业微信开发实战(三、OA审批之回调通知、获取审批单号、审批详情)
  11. 爬虫python淘宝_python爬虫爬取淘宝失败原因分析
  12. 《Visual Basic.Net 循序渐进》问题收集贴
  13. PHP写的二维码签到,大家支持一下吧!
  14. 关于前后台数据的提交方式
  15. linux mysql 进程查看工具_linux查看正在运行的进程(如何在Linux中查看所有正在运行的进程)...
  16. easyexcel注解样式无效_easyexcel注解
  17. 抖音3D旋转相册 (源码下载)
  18. 黑马程序员——java基础第一课
  19. 程序员科班出身的专业有哪些?
  20. 欧盟加密监管法案通过,美国急了?

热门文章

  1. 如何用金山打字通等软件练习准确地打JAVA语言
  2. 东芝计算机配置,东芝Toshiba笔记本电脑开机进入BIOS的方法与bios设置参数介绍(ESC+F1)...
  3. angularjs实现复选框赋值传参提交表单
  4. mysql front的使用注意要点
  5. 网络天空、诺维格、高波、爱虫病毒专杀工具 040421 下载
  6. android 电视 刷机,康佳电视通用刷机救砖教程分享
  7. 项目实战-电商(网上书城)
  8. java 视频截图_Java Web 中使用ffmpeg实现视频转码、视频截图
  9. 计算机网络编程基础知识总结思维导图
  10. 大学英语四六级13年12月大改革应对办法全套复习规划