1. 什么是死锁?

多个进程 在运行过程中 因为争夺资源 而造成的一种僵局, 当进程处于这种僵持状态的时候, 若无外力作用, 它们将永远无法向前推进. 这种状态就称为死锁

2. 产生死锁的必要条件

产生死锁总共有 4 个必要条件:

  • 资源互斥: 当一个资源被一个进程使用时候, 其他继承不能使用该资源
  • 资源不可剥夺: 进程已持有的资源在使用完之前是不可被剥夺的, 只能在使用完后由自己释放
  • 请求和保持: 当进程在请求其他资源的时候, 对自己已持有的资源保持不放
  • 循环等待: 即存在一个等待队列: 例如: A 占有 B 的资源, B 占有 C 的资源, C 占有 A 的资源, 这样就形成了一个等待环路

当以上 4 个条件同时成立的时候, 就会产生死锁

3. 预防死锁的方法

  • 资源一次性分配(破坏请求条件): 一次性分配所有的资源, 这样就不会再有请求了
  • (破坏保持条件): 一个进程只要有一个资源得不到分配, 就也不给这个进程分配其他资源
  • 可剥夺资源(破坏不可剥夺性): 一个进程即使获得了部分资源, 但是如果得不到其他资源, 就需要释放掉已有的资源
  • 资源有序分配(破坏循环等待): 系统为每类资源分配一个编号, 每一个进程按照编号以递增的顺序请求资源, 释放则相反

4. 避免死锁的方法

预防死锁的四种方法, 都会严重的影响系统性能. 因此可以尽可能去避免死锁的产生.

在避免死锁的策略中, 允许进程动态地申请资源. 所以, 系统在进行资源分配的时候, 会预先计算资源分配的安全性, 如果此次资源分配不会导致系统进入不安全的状态, 就将资源分配给进程, 否则, 进程等待

避免死锁的方法中最经典和最重要的就是: 银行家算法
原理:
将操作系统视为一个银行家, 将操作系统所管理的资源视为银行家的资金, 进程申请资源就视为用户向银行家贷款

  • 当一个顾客对资金的最大需求量不超过银行家现有的资金时, 就可以接纳该顾客
  • 顾客可以分期贷款, 但是贷款的总额不可以超过最大需求量
  • 当银行家现有资金不能满足用户尚需的贷款金额时, 可以推迟支付贷款, 但是使顾客在有限的时间内拿到贷款
  • 当顾客得到所有所需资金后, 一定可以在有限时间内归还所有的资金

5. 解除死锁的方法

  1. 剥夺资源: 从其他进程剥夺足够数量的资源给死锁, 用以解除死锁状态
  2. 撤销进程: 撤销系统中一个或者多个死锁进程

什么是死锁? 产生死锁的必要条件?怎样预防和避免死锁?相关推荐

  1. 高并发之——死锁,死锁的四个必要条件以及处理策略

    一.什么是死锁 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力.然而,并发执行也带来了新的问题--死锁. 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(D ...

  2. 死锁及其四个必要条件

    死锁   死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的 ...

  3. 关于死锁,死锁的四个必要条件的总结

    什么是死锁? 死锁,指的是多个进程再运行期间因争夺资源而产生的一种僵局,若无外力作用(破坏死锁),程序将无法运行. 死锁产生的四个必要条件 互斥条件: 进程要求对所分配的资源(如打印机)进行排他性控制 ...

  4. 面试问题之操作系统:死锁的四个必要条件和解决办法

    面试问题之操作系统:死锁的四个必要条件和解决办法 参考文章: (1)面试问题之操作系统:死锁的四个必要条件和解决办法 (2)https://www.cnblogs.com/yichengming/p/ ...

  5. 死锁的4个必要条件和处理策略

    1.死锁的例子:       资源A.B,进程C.D描述如下: 资源A和资源B,都是不可剥夺资源, 现在进程C已经申请了资源A,进程D也申请了资源B, 进程C接下来的操作需要用到资源B,而进程D恰好也 ...

  6. 死锁的四个必要条件,及处理方法

    死锁的四个必要条件互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源.非剥夺条件(N ...

  7. 死锁的代码产生及必要条件与预防

    死锁 死锁的定义及现象 简单的定义 复杂的定义 死锁的代码及现象 死锁的必要条件 预防死锁 死锁的定义及现象 简单的定义 当一个执行流获取到互斥锁后,并没有进行解锁,就会导致其他执行流由于获取不到锁资 ...

  8. 死锁的四个必要条件和解决办法

    死锁概念及产生原理     概念:多个并发进程因争夺系统资源而产生相互等待的现象.     原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发 ...

  9. 死锁的四个必要条件以及处理策略

    一.什么是死锁 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局. 例如,某计算机系统中只有一台打印机和一台输入设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此 ...

最新文章

  1. oracle负载均衡方案,Oracle负载均衡配置代码
  2. TurnipBit:可以带着孩子一起玩编程的MicroPython开发板!
  3. mysql1045错误如何解决,Java面试真题精选
  4. oracle易忘函数用法(3)
  5. Hadoop Yarn内存使用优化配置
  6. 在VS2003中以ClassLibrary工程的方式管理Web工程.
  7. oracle归档日志的概念,浅谈Oracle归档日志
  8. 统计学习笔记(4) 线性回归(1)
  9. LeetCode 837. 新21点(动态规划)
  10. oracle 数据库 swap,Oracle swap 100%案例分析
  11. python自动化框架学习-pyautogui
  12. 浏览器控制台console
  13. 【转】robot framework + python实现http接口自动化测试框架
  14. 使用ILSpy查看dll里的部分代码
  15. python破解百度云限速_python实战小项目,多线程百度云盘下载,突破限速,超越迅雷超高速下载...
  16. pe安装linux 12.04,乌班图系统Ubuntu 12.04安装教程(图文详解)
  17. mysql汽车网站数据库设计_基于数据库和JAVA的网上汽车租赁管理系统的设计(MySQL)...
  18. BestCoder HDU 5750 Dertouzos
  19. Matlab 蒙特卡洛求解三门问题
  20. Docker 学习前置,网络IP地址以及交互

热门文章

  1. 分布式自增ID算法-Snowflake详解
  2. Java基于微信小程序的新冠疫苗预约小程序 springboot+vue+elementUI
  3. 《MATLAB智能算法30个案例》:第17章 基于PSO工具箱的函数寻优算法
  4. 如何给上位机设计好看的ICON
  5. BZOJ 3028: 食物 [生成函数 隔板法 | 广义二项式定理]
  6. 重磅福利!CoinEX8推出免费上币活动
  7. 一款基于flutter的仿微博客户端(仿微博首页,视频页,聊天页面等)
  8. python ip获取位置
  9. C#在生成文件路径时去除特殊字符
  10. grub shell 错误_使用 grub shell 修改品牌电脑 BIOS 中屏蔽的 DVMT 设置