当前位置: 首页 > news >正文

2.4.1死锁的概念

死锁、饥饿、死循环区别

死锁和饥饿是操作系统需要考虑的,死循环一般是程序员写的代码逻辑有问题,需要被管理者程序员考虑,三者都是一种无法向前推进的现象

死锁是因为进程之间互相得不到对方的资源而导致的,进程最少有2个,即发生死锁的进程一定处于阻塞态,饥饿可能是只有一个进程发生饥饿现象,发生饥饿的进程可能处于就绪态或阻塞态,死循环可能一直上处理机运行,即可能是运行态

死锁产生的必要条件

1.资源是互斥的:这个资源必须同一时刻只能被一个进程使用

2.不剥夺:别的进程已经拿上的资源,你不能直接抢

3.请求和保持:自己已经拿上的不放,然后又去请求别的资源,别人也不能用已经拿上的

4.循环等待:我等你你等它又等我的环路(发生死锁一定有循环等待,但是有循环等待不代表一定发生死锁,比如下图中的白爷爷,1、2、3、4、5号和白爷爷之间有循环等待,而3号等的4号的资源和白爷爷拿的资源是一个可替代同类资源,则如果现在白爷爷释放了手中的资源,3号拿到了,那循环等待将被打破,故当是循环等待时+资源无可替代资源即唯一时,必定会发生死锁)

 

什么时候会发生死锁

当不可剥夺的资源发生不合理分配时,可能会导致死锁

1.对不可资源资源的竞争可能引起死锁

2.进程请求和释放资源的顺序不当可能导致死锁

3.信号量的使用不当可能也会造成死锁

 

死锁的处理策略

 

知识汇总

 

http://www.dtcms.com/a/202933.html

相关文章:

  • 计算机网络通信技术与协议(七)———关于ACL的详细解释
  • 迪菲-赫尔曼密钥交换算法深度解析
  • 重构研发效能:项目管理引领软件工厂迈向智能化
  • 第二届帕鲁杯screenshot
  • 【Linux】第二十一章 管理存储堆栈
  • 三视图dxf 生成brep 3d图重建 pythonocc solid
  • 适合初学者的机器学习路线图
  • SpringBootDay1|面试题
  • NC65联查单据问题总结
  • 电子电路:什么是射极电阻?
  • 汉语词汇的神奇拼图:关联性的魅力
  • C++数据结构——红黑树
  • 25-CAN总线
  • Python60日基础学习打卡D31
  • 集星獭 | 重塑集成体验:新版编排重构仿真电商订单数据入库
  • 火车车号识别软件如何提升列车调度效率?
  • Redis--Redis命令详解
  • 自建主机NAS
  • 腾讯一面+二面总结
  • beanstalk一直被重新保留(reserved 状态)消息删除
  • 轴承表面缺陷检测数据集VOC+YOLO格式3945张3类别
  • 使用winRM远程访问Windows系统,并执行指定命令,或调用执行指定bat文件
  • 【jzxxoj编程:4420: 寻找自我3】2022-1-30
  • 嵌入式开发学习日志(linux系统编程--文件读写函数)Day24
  • spdlog高性能日志库
  • c语言刷题之实际问题
  • HTML页面渲染过程
  • VMD查看蛋白质-配体的分子动力学模拟轨迹
  • Oracle如何解决LATCH:CACHE BUFFERS CHAINS
  • 阿里云服务器Ubuntu的git clone失败问题解决方案