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

2.4.1死锁的概念

死锁、饥饿、死循环区别

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

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

死锁产生的必要条件

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

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

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

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

 

什么时候会发生死锁

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

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

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

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

 

死锁的处理策略

 

知识汇总

 

http://www.xdnf.cn/news/7724.html

相关文章:

  • 中小型制造业信息化战略规划指南
  • SpringBoot 自动配置
  • 【课堂笔记】指数族与广义线性模型(GLMs)
  • zipkin+micrometer实现链路追踪
  • Java 01简单集合
  • Vue3——Pinia
  • 编译原理的部分概念
  • docker常用指令总结
  • A1-A2 英语学习系列 第四集 中国版
  • HarmonyOS5云服务技术分享--ArkTS开发Node环境
  • 不同消息队列保证高可用实现方案
  • C#入门系列【基础类型大冒险】从0到1,解锁编程世界的“元素周期表”
  • 50个Java+SpringBoot+Vue毕业设计选题(含技术栈+核心功能)
  • sqli-labs第十三关——’)POST报错注入
  • go.mod:5: unknown directive: toolchain
  • MySQL高频面试八连问(附场景化解析)
  • 解决方案:新建spring项目的时候出现java版本不匹配的问题
  • EtherCAT转CANopen网关:破解垃圾处理场工业通信难题
  • Redis中SETNX、Lua 脚本和 Redis事务的对比
  • 10.17 LangChain v0.3核心机制解析:从工具调用到生产级优化的实战全指南
  • 丝杆支撑座:机床生命周期的精度与效能
  • 【Python装饰器深度解析】从语法糖到元编程实战
  • 【iOS】类结构分析
  • Nginx详细配置说明
  • CSS-5.1 Transition 过渡
  • Dify 快速上手 MCP!Java 搭建 MCP Server 接入 Dify详细实战攻略
  • vue中列表filter方法的作用
  • 深入探讨redis:哨兵模式
  • linux下jenkins部署安装使用
  • 上肢康复机器人设计与临床应用研究