什么是死锁? 产生死锁的必要条件?怎样预防和避免死锁?
1. 什么是死锁?
当 多个进程 在运行过程中 因为争夺资源 而造成的一种僵局, 当进程处于这种僵持状态的时候, 若无外力作用, 它们将永远无法向前推进. 这种状态就称为死锁
2. 产生死锁的必要条件
产生死锁总共有 4 个必要条件:
- 资源互斥: 当一个资源被一个进程使用时候, 其他继承不能使用该资源
- 资源不可剥夺: 进程已持有的资源在使用完之前是不可被剥夺的, 只能在使用完后由自己释放
- 请求和保持: 当进程在请求其他资源的时候, 对自己已持有的资源保持不放
- 循环等待: 即存在一个等待队列: 例如: A 占有 B 的资源, B 占有 C 的资源, C 占有 A 的资源, 这样就形成了一个等待环路
当以上 4 个条件同时成立的时候, 就会产生死锁
3. 预防死锁的方法
- 资源一次性分配(破坏请求条件): 一次性分配所有的资源, 这样就不会再有请求了
- (破坏保持条件): 一个进程只要有一个资源得不到分配, 就也不给这个进程分配其他资源
- 可剥夺资源(破坏不可剥夺性): 一个进程即使获得了部分资源, 但是如果得不到其他资源, 就需要释放掉已有的资源
- 资源有序分配(破坏循环等待): 系统为每类资源分配一个编号, 每一个进程按照编号以递增的顺序请求资源, 释放则相反
4. 避免死锁的方法
预防死锁的四种方法, 都会严重的影响系统性能. 因此可以尽可能去避免死锁的产生.
在避免死锁的策略中, 允许进程动态地申请资源. 所以, 系统在进行资源分配的时候, 会预先计算资源分配的安全性, 如果此次资源分配不会导致系统进入不安全的状态, 就将资源分配给进程, 否则, 进程等待
避免死锁的方法中最经典和最重要的就是: 银行家算法
原理:
将操作系统视为一个银行家, 将操作系统所管理的资源视为银行家的资金, 进程申请资源就视为用户向银行家贷款
- 当一个顾客对资金的最大需求量不超过银行家现有的资金时, 就可以接纳该顾客
- 顾客可以分期贷款, 但是贷款的总额不可以超过最大需求量
- 当银行家现有资金不能满足用户尚需的贷款金额时, 可以推迟支付贷款, 但是使顾客在有限的时间内拿到贷款
- 当顾客得到所有所需资金后, 一定可以在有限时间内归还所有的资金
5. 解除死锁的方法
- 剥夺资源: 从其他进程剥夺足够数量的资源给死锁, 用以解除死锁状态
- 撤销进程: 撤销系统中一个或者多个死锁进程
什么是死锁? 产生死锁的必要条件?怎样预防和避免死锁?相关推荐
- 高并发之——死锁,死锁的四个必要条件以及处理策略
一.什么是死锁 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力.然而,并发执行也带来了新的问题--死锁. 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(D ...
- 死锁及其四个必要条件
死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的 ...
- 关于死锁,死锁的四个必要条件的总结
什么是死锁? 死锁,指的是多个进程再运行期间因争夺资源而产生的一种僵局,若无外力作用(破坏死锁),程序将无法运行. 死锁产生的四个必要条件 互斥条件: 进程要求对所分配的资源(如打印机)进行排他性控制 ...
- 面试问题之操作系统:死锁的四个必要条件和解决办法
面试问题之操作系统:死锁的四个必要条件和解决办法 参考文章: (1)面试问题之操作系统:死锁的四个必要条件和解决办法 (2)https://www.cnblogs.com/yichengming/p/ ...
- 死锁的4个必要条件和处理策略
1.死锁的例子: 资源A.B,进程C.D描述如下: 资源A和资源B,都是不可剥夺资源, 现在进程C已经申请了资源A,进程D也申请了资源B, 进程C接下来的操作需要用到资源B,而进程D恰好也 ...
- 死锁的四个必要条件,及处理方法
死锁的四个必要条件互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源.非剥夺条件(N ...
- 死锁的代码产生及必要条件与预防
死锁 死锁的定义及现象 简单的定义 复杂的定义 死锁的代码及现象 死锁的必要条件 预防死锁 死锁的定义及现象 简单的定义 当一个执行流获取到互斥锁后,并没有进行解锁,就会导致其他执行流由于获取不到锁资 ...
- 死锁的四个必要条件和解决办法
死锁概念及产生原理 概念:多个并发进程因争夺系统资源而产生相互等待的现象. 原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发 ...
- 死锁的四个必要条件以及处理策略
一.什么是死锁 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局. 例如,某计算机系统中只有一台打印机和一台输入设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此 ...
最新文章
- oracle负载均衡方案,Oracle负载均衡配置代码
- TurnipBit:可以带着孩子一起玩编程的MicroPython开发板!
- mysql1045错误如何解决,Java面试真题精选
- oracle易忘函数用法(3)
- Hadoop Yarn内存使用优化配置
- 在VS2003中以ClassLibrary工程的方式管理Web工程.
- oracle归档日志的概念,浅谈Oracle归档日志
- 统计学习笔记(4) 线性回归(1)
- LeetCode 837. 新21点(动态规划)
- oracle 数据库 swap,Oracle swap 100%案例分析
- python自动化框架学习-pyautogui
- 浏览器控制台console
- 【转】robot framework + python实现http接口自动化测试框架
- 使用ILSpy查看dll里的部分代码
- python破解百度云限速_python实战小项目,多线程百度云盘下载,突破限速,超越迅雷超高速下载...
- pe安装linux 12.04,乌班图系统Ubuntu 12.04安装教程(图文详解)
- mysql汽车网站数据库设计_基于数据库和JAVA的网上汽车租赁管理系统的设计(MySQL)...
- BestCoder HDU 5750 Dertouzos
- Matlab 蒙特卡洛求解三门问题
- Docker 学习前置,网络IP地址以及交互
热门文章
- 分布式自增ID算法-Snowflake详解
- Java基于微信小程序的新冠疫苗预约小程序 springboot+vue+elementUI
- 《MATLAB智能算法30个案例》:第17章 基于PSO工具箱的函数寻优算法
- 如何给上位机设计好看的ICON
- BZOJ 3028: 食物 [生成函数 隔板法 | 广义二项式定理]
- 重磅福利!CoinEX8推出免费上币活动
- 一款基于flutter的仿微博客户端(仿微博首页,视频页,聊天页面等)
- python ip获取位置
- C#在生成文件路径时去除特殊字符
- grub shell 错误_使用 grub shell 修改品牌电脑 BIOS 中屏蔽的 DVMT 设置