2.4.1 死锁的概念

在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推的现象,就是“死锁”。通俗一点就是我有一个资源你也有一个资源,但我们还想要对方手里的资源,可对方还不放手,于是我们就都等对方放手,导致进程没办法推进,这就造成了死锁。

目录

2.4.1 死锁的概念

2.4.1.1 死锁、饥饿、死循环

2.4.1.2  死锁产生的必要条件

2.4.1.3 死锁发生的时机

2.4.1.4 处理死锁的策略


2.4.1.1 死锁、饥饿、死循环

  之前我们接触过饥饿,还有在程序中出现的死循环,他们都会使进程没有办法继续推进下去,下面来说明一下三者的区别。

  区别
死锁
死锁一定是“循环等待对方手里的资源”导致的,因此如果有死锁现象,那至少有两个或两个以上的进程同时发生死锁。另外,发生死锁的进程一定处于阻塞态
饥饿
可能只有一个进程发生饥饿。发生饥饿的进程既可能是阻塞态(如长期得不到需要的I/O设备),也可能是就绪态(长期得不到处理机)
死循环
可能只有一个进程发生死循环。死循环的进程可以上处理机运行(可以是运行态),只不过无法像期待的那样顺利推进。死锁和饥饿问题是由于操作系统分配资源的策略不合理导致的,而死循环是由代码逻辑的错误导致的。死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题。

2.4.1.2  死锁产生的必要条件

互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)。像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的(因为进程不用阻塞等待这种资源)。

不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。

  请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放
  循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。
在循环等待这里我们注意一下,死锁一定会有循环等待但是循环等待却不一定发生死锁(系统中存在的所需资源数大于1)。

2.4.1.3 死锁发生的时机

  • 对系统资源的竞争。各进程对不可剥夺的资源(如打印机)的竞争可能引起死锁,对可剥夺的资源(CPU)的竞争是不会引起死锁的。
  • 进程推进顺序非法。请求和释放资源的顺序不当,也同样会导致死锁。例如,并发执行的进程P1、P2 分别申请并占有了资源 R1、R2,之后进程P1又紧接着申请资源R2,而进程P2又申请资源R1,两者会因为申请的资源被对方占有而阻塞,从而发生死锁。
  • 信号量的使用不当也会造成死锁。如生产者-消费者问题中,如果实现互斥的P操作在实现同步的P操作之前,就有可能导致死锁。(可以把互斥信号量、同步信号量也看做是一种抽象的系统资源)
总之,对不可剥夺资源的不合理分配,可能导致死锁。

2.4.1.4 处理死锁的策略

  • 预防死锁。破坏死锁产生的四个必要条件中的一个或几个。
  • 避免死锁。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
  • 死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。

其中前两条不允许死锁的发生,而最后一条可以允许死锁的发生。

操作系统(二十八)死锁的概念相关推荐

  1. SAP UI5 初学者教程之二十八 - SAP UI5 应用的集成测试工具 OPA 介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  2. FreeSql (二十八)事务

    FreeSql实现了四种数据库事务的使用方法,脏读等事务相关方法暂时未提供.主要原因系这些方法各大数据库.甚至引擎的事务级别五花八门较难统一. 事务用于处理数据的一致性,处于同一个事务中的操作是一个U ...

  3. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤...

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  4. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  5. mysql revoke 用法_mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执行查 ...

  6. 教你一百二十八个说话的技巧(气质很内涵)(有霸气不霸道)

    教你一百二十八个说话的技巧(气质很内涵)(有霸气不霸道) 1.说话不要有攻击性,不要有杀伤力,不夸已能,不扬人恶,自然能化敌为友.  2.一个常常看别人缺点的人,自己本身就不够好,因为他没有时间检讨他 ...

  7. 2008R2Win7管理二十八Mail之基本使用

    2008R2Win7管理二十八Mail之基本使用 上篇我们已经安装好了exchange2010,呵呵本片简单介绍和看下ex2010的基本界面和使用 安装完成打开exchange控制台如图所示 汗,有试 ...

  8. 微信小程序把玩(二十八)image组件

    原文:微信小程序把玩(二十八)image组件 image组件也是一个程序不可缺少的,可以这样说一个app中image组件随处可以看到,一般 image有两种加载方式第一种是网络图片第二种是本地图片资源 ...

  9. Citrix 服务器虚拟化之二十八 XenApp6.5发布文档内容

    Citrix 服务器虚拟化之二十八  XenApp 6.5发布文档内容 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1)  服务器桌面:发布场中服务器的整个 ...

  10. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

最新文章

  1. 社会生活中常用的14条著名法则
  2. 五子棋c语言代码ppt答辩,C语言案例:控制台版本的五子棋游戏【代码】
  3. 上海东华计算机专业学硕复试,17届东华计算机初试+复试经验分享~
  4. Oracle日志分类
  5. 利用Kubernetes名称空间来管理内存和CPU资源(一)
  6. imregionalmax imregionalmin imextendedmax imextendedmin imhmax imhmin 函数的详解 matlab中函数
  7. UBUNTU16.04下Teamviewer的安装
  8. 安卓linux开机画面,Android开机logo简单修改方法
  9. MySQL练习题(经典50题)
  10. 面经 | 靠一份PPT做自我介绍,成功拿下了互联网名企offer
  11. 关于PHP微信h5棋牌程序开发数据库的备份
  12. 框架设计--第二章 Spring中的Bean--习题答案
  13. 大数据时代的数据挖掘是怎么做的?
  14. 国际网页短信平台搭建|后台定制-移讯云短信系统
  15. 组合(Combination)
  16. 机器学习:self-paced 和 fine-tuning
  17. index.tsx:19 Uncaught Error: A <Route> is only ever to be used as the child of <Routes> element, nev
  18. 代码实现判断主机字节序(大端 or小端 )-- 面试题
  19. linux rz位置,Linux下rz命令使用的实例详解
  20. 1060显卡支持dx12吗_GTX1660和GTX1060哪个性价比高?GTX1060和GTX1660显卡区别对比

热门文章

  1. oracle 自定义函数
  2. qs.stringify和JSON.stringify的使用和区别
  3. Spring Boot修改内置Tomcat端口号
  4. MAPREDUCE的实战案例
  5. DevOps的几个场景
  6. HRESULT 的判断
  7. 创客运动引发第三次工业革命
  8. jQuery(UI)常用插件
  9. IIS问题解决之——无法访问数据库
  10. 正则表达式匹配C++代码实现