死锁是由于并发进程只能按互斥方式访问临界资源等多种因素引起的,并且是一种与执行时间和速度密切相关的错误现象。
死锁的一般定义:若在一个进程集合中,每一个进程都在等待一个永远不会发生的事件而形成一个永久的阻塞状态,这种阻塞状态就是死锁。

死锁的产生条件:
1.互斥(mutual exclusion):系统存在着临界资源;
2.占有并等待(hold and wait):已经得到某些资源的进程还可以申请其他新资源;
3.不可剥夺(no preemption):已经分配的资源在其宿主没有释放之前不允许被剥夺;
4.循环等待(circular waiting):系统中存在多个(大于2个)进程形成的封闭的进程链,链中的每个进程都在等待它的下一个进程所占有的资源;

死锁的预防:
因为独占资源必须以互斥方式进行访问,所以要预防死锁只能从破坏后三个条件下手了。
1.破坏占有并等待条件:
要破坏这个条件,就要求每个进程必须一次性的请求它们所需要的所有资源,若无法全部获取就等待,直到满足为止,也可以采用事务机制,确保可以回滚,即把获取、释放资源做成原子性的。这个方法实现起来可能会比较困难,因为某些情况下,进程并不能事先直到自己需要哪些资源,也有时候并不需要分配到所有资源就可以运行。
2.破坏不可剥夺条件:
一个已占有资源的进程若要再申请新的资源,它必须先释放已占有的资源。若随后再需要这些资源,需要重新申请。
3.破坏循环等待条件:
将系统中所有的资源设置标志位、排序,规定所有的进程申请资源必须以一定的顺序(升序或降序)做操作。

死锁的避免:
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。
死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。
避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。方法如下:
1.如果一个进程的当前请求的资源会导致死锁,系统拒绝启动该进程;
2.如果一个资源的分配会导致下一步的死锁,系统就拒绝本次的分配;
显然要避免死锁,必须事先知道系统拥有的资源数量及其属性。

死锁的产生、预防和避免相关推荐

  1. 2.4操作系统之死锁详解(预防、避免、检测、解除)+思维导图

    文章目录 0.思维导图 1.什么是死锁? 2.死锁.饥饿.死循环的区别 3.死锁产生的四个必要条件 4.什么时候会发生死锁? 5.死锁的处理策略 (1)预防死锁 ① 破坏互斥条件 ② 破坏不可剥夺条件 ...

  2. 多线程之死锁介绍及预防

    综述 在遇到线程安全问题的时候,我们会使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致锁顺序死锁(Lock-Ordering Deadlock).或者有的场景我们使用线程池和信号量来限制资 ...

  3. 死锁(什么是死锁、怎样预防死锁、避免死锁、检测和解除)

    知识总览 什么是死锁 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是"死锁".发生死锁后若无外力干涉,这些进程都将无 ...

  4. c++产生死锁的必要条件?已经如何预防死锁?

    产生死锁的必要条件?已经如何预防死锁? 一.计算机系统中的死锁 二.产生死锁的必要条件 三.处理死锁的方法 四.预防死锁 五.解决死锁 一.计算机系统中的死锁 竞争不可抢占性资源引起死锁 竞争可消耗资 ...

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

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

  6. 什么是死锁? 产生死锁的必要条件?怎样预防和避免死锁?

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

  7. 操作系统学习笔记 第三章:处理机调度与死锁(王道考研)

    本文章基于网课: 2019 王道考研 操作系统 考试复习推荐资料:操作系统复习总结 - 百度文库 (baidu.com) 需要相关电子书的可以关注我的公众号BaretH后台回复操作系统 第一章:操作系 ...

  8. linux课程设计死锁避免,linux操作系统课程设计—车辆死锁.doc

    linux操作系统课程设计-车辆死锁.doc 键入文字"操作系统原理"课程设计BX090709吴沛儒操作系统原理课程设计报告姓名吴沛儒班级BX0907学号9指导老师胡静二〇一一年十 ...

  9. 【408预推免复习】操作系统之处理机调度与死锁

    [408&预推免复习]操作系统之处理机调度与死锁 文章目录 1 作业调度和进程调度 2 实时调度和死锁概述 3 预防死锁和避免死锁 1 作业调度和进程调度 什么是处理机调度? 处理机调度:如何 ...

  10. 深入浅出SQL Server中的死锁

    简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相关观念有一个理解. 一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理 ...

最新文章

  1. 警告: Could not load driverClass com.mysql.cj.jdbc.Driver
  2. 修改wamp默认网站目录
  3. 【C语言】接收字符,大小写字符相互转换后输出,数字不输出
  4. 设计模式的理解: 职责链模式 (Chain of Responsibility)
  5. [NodeJs] npm提供了哪些钩子?各有什么作用?
  6. python实战扫码下载_实例:用 Python 做一个扫码工具
  7. sql ddl中key_SQL DDL:SQL Server中SQL DDL命令入门
  8. c/c++教程 - 2.4.2.6 初始化列表语法,初始化列表参数
  9. 将本地 jar 安装到本地 maven 仓库
  10. HDU-1501-Zipper
  11. 关于Handler和子线程的记录
  12. 超星PDG格式转换成PDF格式及其它格式
  13. HuaWei ❀ 双协议栈
  14. 大学生数学竞赛资料目录20190403更新
  15. java生成卡号_java 生成银行卡号
  16. MATLAB批量读取文件夹名,文件名,文件数据
  17. prometheus入门实例
  18. 国外和国内高校官网的差异
  19. NGINX中如何根据客户端IP地址控制访问
  20. 构造方法调用另一个构造方法

热门文章

  1. mysql+误操作怎么恢复_Mysql误操作恢复流程
  2. oracle42997,oracle与db2的比较
  3. 怎么调用获取被创建的预制体_Go 语言 Web 编程系列—— 获取用户请求数据(上)...
  4. android 多个复选框,Android UI控件之CheckBox(复选框、多选框)
  5. mysql函数封装_PHP访问MYSQL数据库封装类(附函数说明)
  6. 飞畅科技-千兆/百兆/核心/PoE/光纤交换机选型指南
  7. 工业交换机那么贵,为什么那么多人都在用?
  8. 工业交换机如何判断性能的好坏呢?
  9. [渝粤教育] 平顶山学院 传播理论与技巧 参考 资料
  10. 【渝粤教育】 国家开放大学2020年春季 1259西方行政学说 参考试题