死锁(哲学家进餐问题)基本介绍和解决办法
死锁的基本介绍:
死锁指两个或两个以上进程在执行过程中,由于资源竞争或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们将无法继续运行下去。哲学家进餐问题:
哲学家进餐问题:
哲学家进餐问题是荷兰学者Dijkstra提出的经典的同步问题之一。哲学家进餐问题是一大类并发控制题的典型例子,涉及信号量机制、管程机制以及死锁等操作系统中关键问题的应用,在操作系统历史上具有非常重要的地位。
问题描述:
有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。
必要的约束条件:
(1)、只有手中有两只筷子才能吃饭
(2)、在自己吃完饭之前,不能放下自己已经拿到的筷子
(3)、如果筷子已经被别人拿走,必须等他吃完主动放下筷子你才能拿,不能抢夺他人手里的筷子。
以上约束条件,分别对应了死锁产生的四个必要条件中的三个,即请求和保持,互斥访问以及不可剥夺。当五个哲学家各自手里拿着一个筷子,这样大家都在等待其他人手里的筷子,他们因为只有一根筷子没法吃饭,就不能放下自己手里的筷子,这就对应了死锁产生的最后一个必要条件——循环等待。
解决办法:
破坏死锁产生的四个必要条件中的任意一个,即可预防死锁。但为了系统的安全,互斥访问和不可剥夺这两个条件,一般不进行破坏,一般破坏另外两个条件:
破坏请求保持条件:
利用原子思想,要么不做,要么全做。即哲学家如果能拿到两只筷子,那么他才会拿起筷子进餐,否则一个筷子也不拿。
破坏循环等待条件:
方法一:给哲学家编号,奇数号哲学家先拿他左边的筷子,偶数号哲学家先拿他右边的筷子。这样破坏了同方向环路,一个哲学家拿到一只筷子后,就阻止了他邻座的一个哲学家吃饭。即0号哲学家和1号哲学家竞争1号筷,2号哲学家和三号哲学家竞争三号筷。
方法二:至多允许四位哲学家进餐,将最后一个哲学家停止申请资源,断开环路。最终能保证有一位哲学家能进餐,用完释放两只筷子,从而使更多的哲学家能够进餐。
方法三:给筷子编号,规定哲学家拿筷子时,只能先拿大的再拿小的(或者先拿小的,再拿大的也行)这样四号哲学家,要么跟0号哲学家竞争0号筷,要么跟三号哲学家竞争4号筷,这样总有一个人可以拿到筷子吃饭,然后释放资源。
死锁(哲学家进餐问题)基本介绍和解决办法相关推荐
- Java中的魔法值介绍及解决办法
所谓魔法值,是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义. int [] array = new int[20];for (int i = 0; i < 20; ...
- 哲学家就餐问题python伪代码_GitHub - doooooit/Dining-philosophers-problem: 哲学家进餐问题的两种解决方法...
哲学家就餐问题 问题描述 哲学家就餐问题(Dining philosophers problem)可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考.吃东西的时候, ...
- 跨站脚本攻击(XSS)分类介绍及解决办法
1.什么是XSS? Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行.利用这些恶意脚本,攻击者可获 ...
- 【操作系统】哲学家进餐问题
问题描述 一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆着一根筷子,桌子的中间是一碗米饭,哲学家们倾注毕生精力用于思考和进餐,哲学家在思考时,并不影响他人.只有当哲学家饥饿时,才试图拿起左.右两根 ...
- 2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )
目录 1.读者-写者问题 2.哲学家进餐问题 实现 3.管程 1.为什么要引入管程? 2.管程的定义和基本特征 3.扩展1:用管程解决生产者消费者问题 4.扩展2:Java中类似于管程的机制 个人 ...
- 操作系统(四) | 经典进程的同步问题(生产者--消费者问题、哲学家进餐问题、读者--写者问题)
文章目录 生产者--消费者问题 分析 实现 哲学家进餐问题 方法一:最多4人同时拿左筷子,最终保证一人能进餐 方法二:同时给左右筷子 解法1:AND信号量 解法2:信号量保护机制 方法三:让奇数先左后 ...
- 微信开挂怎么防止封号_为什么我的微信老是被封解决办法 微信如何防止被封号详细介绍...
我们在使用微信的时候,总是会遇到很多的难题,这都是正常的.当我们在遇到了为什么我的微信老是被封的时候,那我们需要如何办呢?今天就一起来跟随知识屋的小编看看如何解决的吧. 为什么我的微信老是被封解决办法 ...
- parsel安装老是失败_Photoshop安装失败解决办法
按照错误提示,卸载了之前的Photoshop.重启了电脑.关掉了杀毒软件和防火墙重新安装还是在安装到2%的时候跳出来上图的错误提示.随后我将Photoshop CS6安装遇到错误方法拿来死马当活马医结 ...
- Ubuntu用户Steam控制器不工作的解决办法
Steam 控制器已开始送货到世界各地游戏玩家手中,不过有朋友遇到 Steam 控制器在 Ubuntu 中无法正常工作,本文我们来介绍一下解决办法.该解决办法并非 Ubuntu 官方提出的最佳解决方案 ...
最新文章
- 【ACM】Uva 455
- 排序中减治法算法伪代码_【算法与数据结构】伪代码与流程图
- ubuntu14.04中安装opencv2.4.13
- python语言自学-零基础小白学习Python编程语言的正确姿势(纯干货)
- 08查找满足条件的n个数
- 二十万字C/C++、嵌入式软开面试题全集宝典二
- jquery实现多级下拉菜单
- python 控制手机摄像头_python+open cv调用手机摄像头,保存文件
- 第16届电源技术专题研讨会
- Android注解支持(Support Annotations)
- dh-make指定包含低线_的构建目录
- 开源项目推荐:3D点云处理软件CloudCompare,基于Qt和OpenGL
- 【编译原理】递归下降语法分析设计原理与实现
- 山东计算机软考题库,软考习题库
- iOS动态库和静态库的运用
- 一个英文字母,一个中文各占多少字节?
- python contains 正则_Python 正则表达式
- struct+Matlab向上向下取整+单位圆向量+matlab求导
- 视打击微软 力挺国产红旗Linux
- 用计算机创造一个宇宙,人工智能令整个宇宙变成一个玄计算机,宇宙是虚拟的,真实世界...
热门文章
- 传统请求风格 VS RestFul 风格
- 彻底删除 thinclient_drives
- 项目缺陷管理工具——禅道
- window修改处理器类型
- 自用PTA题目记录0023
- linux驱动源码阅读之情景分析法实践指南
- BZOJ3673 可持久并查集
- 小5与程序员的八年时间,一起来回想回想八年的经历吧
- 线程池三大方法,七大参数,四种拒绝策略
- python连接plc_Python与PLC踩坑实录:成功解决西门子 PLC S7-200_SMART与PC连接时不能同时用Python的snap7包和step7软件同时连接...