死锁的基本介绍:

死锁指两个或两个以上进程在执行过程中,由于资源竞争或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们将无法继续运行下去。哲学家进餐问题:

哲学家进餐问题:

哲学家进餐问题是荷兰学者Dijkstra提出的经典的同步问题之一。哲学家进餐问题是一大类并发控制题的典型例子,涉及信号量机制、管程机制以及死锁等操作系统中关键问题的应用,在操作系统历史上具有非常重要的地位。

问题描述:

      有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。

必要的约束条件:

(1)、只有手中有两只筷子才能吃饭

(2)、在自己吃完饭之前,不能放下自己已经拿到的筷子

(3)、如果筷子已经被别人拿走,必须等他吃完主动放下筷子你才能拿,不能抢夺他人手里的筷子。

以上约束条件,分别对应了死锁产生的四个必要条件中的三个,即请求和保持,互斥访问以及不可剥夺。当五个哲学家各自手里拿着一个筷子,这样大家都在等待其他人手里的筷子,他们因为只有一根筷子没法吃饭,就不能放下自己手里的筷子,这就对应了死锁产生的最后一个必要条件——循环等待。

解决办法:

破坏死锁产生的四个必要条件中的任意一个,即可预防死锁。但为了系统的安全,互斥访问和不可剥夺这两个条件,一般不进行破坏,一般破坏另外两个条件:

   破坏请求保持条件:

利用原子思想,要么不做,要么全做。即哲学家如果能拿到两只筷子,那么他才会拿起筷子进餐,否则一个筷子也不拿。

    破坏循环等待条件:

        方法一:给哲学家编号,奇数号哲学家先拿他左边的筷子,偶数号哲学家先拿他右边的筷子。这样破坏了同方向环路,一个哲学家拿到一只筷子后,就阻止了他邻座的一个哲学家吃饭。即0号哲学家和1号哲学家竞争1号筷,2号哲学家和三号哲学家竞争三号筷。

方法二:至多允许四位哲学家进餐,将最后一个哲学家停止申请资源,断开环路。最终能保证有一位哲学家能进餐,用完释放两只筷子,从而使更多的哲学家能够进餐。

方法三:给筷子编号,规定哲学家拿筷子时,只能先拿大的再拿小的(或者先拿小的,再拿大的也行)这样四号哲学家,要么跟0号哲学家竞争0号筷,要么跟三号哲学家竞争4号筷,这样总有一个人可以拿到筷子吃饭,然后释放资源。

死锁(哲学家进餐问题)基本介绍和解决办法相关推荐

  1. Java中的魔法值介绍及解决办法

    所谓魔法值,是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义. int [] array = new int[20];for (int i = 0; i < 20; ...

  2. 哲学家就餐问题python伪代码_GitHub - doooooit/Dining-philosophers-problem: 哲学家进餐问题的两种解决方法...

    哲学家就餐问题 问题描述 哲学家就餐问题(Dining philosophers problem)可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考.吃东西的时候, ...

  3. 跨站脚本攻击(XSS)分类介绍及解决办法

    1.什么是XSS? Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行.利用这些恶意脚本,攻击者可获 ...

  4. 【操作系统】哲学家进餐问题

    问题描述 一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆着一根筷子,桌子的中间是一碗米饭,哲学家们倾注毕生精力用于思考和进餐,哲学家在思考时,并不影响他人.只有当哲学家饥饿时,才试图拿起左.右两根 ...

  5. 2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )

    目录 1.读者-写者问题 2.哲学家进餐问题 实现 3.管程 1.为什么要引入管程? ​2.管程的定义和基本特征 3.扩展1:用管程解决生产者消费者问题 4.扩展2:Java中类似于管程的机制  个人 ...

  6. 操作系统(四) | 经典进程的同步问题(生产者--消费者问题、哲学家进餐问题、读者--写者问题)

    文章目录 生产者--消费者问题 分析 实现 哲学家进餐问题 方法一:最多4人同时拿左筷子,最终保证一人能进餐 方法二:同时给左右筷子 解法1:AND信号量 解法2:信号量保护机制 方法三:让奇数先左后 ...

  7. 微信开挂怎么防止封号_为什么我的微信老是被封解决办法 微信如何防止被封号详细介绍...

    我们在使用微信的时候,总是会遇到很多的难题,这都是正常的.当我们在遇到了为什么我的微信老是被封的时候,那我们需要如何办呢?今天就一起来跟随知识屋的小编看看如何解决的吧. 为什么我的微信老是被封解决办法 ...

  8. parsel安装老是失败_Photoshop安装失败解决办法

    按照错误提示,卸载了之前的Photoshop.重启了电脑.关掉了杀毒软件和防火墙重新安装还是在安装到2%的时候跳出来上图的错误提示.随后我将Photoshop CS6安装遇到错误方法拿来死马当活马医结 ...

  9. Ubuntu用户Steam控制器不工作的解决办法

    Steam 控制器已开始送货到世界各地游戏玩家手中,不过有朋友遇到 Steam 控制器在 Ubuntu 中无法正常工作,本文我们来介绍一下解决办法.该解决办法并非 Ubuntu 官方提出的最佳解决方案 ...

最新文章

  1. 【ACM】Uva 455
  2. 排序中减治法算法伪代码_【算法与数据结构】伪代码与流程图
  3. ubuntu14.04中安装opencv2.4.13
  4. python语言自学-零基础小白学习Python编程语言的正确姿势(纯干货)
  5. 08查找满足条件的n个数
  6. 二十万字C/C++、嵌入式软开面试题全集宝典二
  7. jquery实现多级下拉菜单
  8. python 控制手机摄像头_python+open cv调用手机摄像头,保存文件
  9. 第16届电源技术专题研讨会
  10. Android注解支持(Support Annotations)
  11. dh-make指定包含低线_的构建目录
  12. 开源项目推荐:3D点云处理软件CloudCompare,基于Qt和OpenGL
  13. 【编译原理】递归下降语法分析设计原理与实现
  14. 山东计算机软考题库,软考习题库
  15. iOS动态库和静态库的运用
  16. 一个英文字母,一个中文各占多少字节?
  17. python contains 正则_Python 正则表达式
  18. struct+Matlab向上向下取整+单位圆向量+matlab求导
  19. 视打击微软 力挺国产红旗Linux
  20. 用计算机创造一个宇宙,人工智能令整个宇宙变成一个玄计算机,宇宙是虚拟的,真实世界...

热门文章

  1. 传统请求风格 VS RestFul 风格
  2. 彻底删除 thinclient_drives
  3. 项目缺陷管理工具——禅道
  4. window修改处理器类型
  5. 自用PTA题目记录0023
  6. linux驱动源码阅读之情景分析法实践指南
  7. BZOJ3673 可持久并查集
  8. 小5与程序员的八年时间,一起来回想回想八年的经历吧
  9. 线程池三大方法,七大参数,四种拒绝策略
  10. python连接plc_Python与PLC踩坑实录:成功解决西门子 PLC S7-200_SMART与PC连接时不能同时用Python的snap7包和step7软件同时连接...