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

死锁的概念

什么是死锁

每个人都占有一个资源,同时又在等待另一个人手里的资源,发生死锁

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

进程死锁,饥饿,死循环的区别

死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象

饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象,比如在短进程优先的算法中,如果源源不断有短进程到来,那么长进程一直得不到处理机就会被饿死

死循环:某种进程在执行的过程中一直跳不出某个循环的现象,有时是因为程序逻辑bug导致的,有时是程序员故意设计的

死锁产生的必要条件

必须满足以下四个条件,任何一个不成立,死锁就不会发生

1.互斥条件:只有对必须互斥使用的资源的抢夺才会导致死锁,比如哲学家的筷子或者打印机设备,想内存还有扬声器这样可以同时让多个进程使用的资源是不会导致死锁的,因为进程不用阻塞等待这种资源

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

3.请求和保持条件:进程已经保持了至少一个资源,但是又提出了新的资源请求,但是又对自己已经有的资源保持不放

4.循环等待条件:存在一种进程循环的等待链,链中的每一个进程已获得的资源同时被下一个进程需求

发生死锁的时候一定有循环等待,但是发生循环等待时未必死锁

如果同类资源数量大于1,即使有循环等待页未必发生死锁,但是如果系统中每一类资源都只有一个,那么循环等待就是死锁的充要条件了

什么时候会发生死锁

对资源的竞争,各进程对不可剥夺的资源的竞争可能引起死锁,对可剥夺的资源竞争是不会引起死锁的

进程推进顺序非法,请求和释放资源的顺序不当,同样会引起死锁

信号量使用不当也会造成死锁

总之就是对不可剥夺的资源的不合理分配会造成死锁

死锁的处理策略

1.预防死锁:破坏死锁产生的四个必要条件中的一个或者几个

2.避免死锁:用某种方式放置系统进入不安全状态,从而避免死锁(银行家算法)上一节的作业里有这个

3.死锁的检测和接触:允许死锁发生,不过操作系统会负责监测处死锁的发生,然后才去某种措施解除死锁

http://www.hskmm.com/?act=detail&tid=21252

相关文章:

  • 【2025-09-29】团队合作
  • 杂凑算法学习笔记
  • pg库支持扩展postgis
  • kuboard部署启用3个etcd(k8s单个master)
  • 数据库服务分布架构(MyCAT)
  • 题解:P14038 [PAIO 2025] Adventure Plan
  • 20231414_王仕琪_密码技术密码杂凑算法学习笔记
  • web3D、webGL、webGPU、webGIS、webXR、webCodecs的概念和对比 - 实践
  • Claude code的 thinking on/off差别有多少
  • Ubuntu 25的网络配置
  • 2025.9.26 测试
  • 贝叶斯学习笔记 - 详解
  • Ubuntu 24和25配置apt国内源
  • 实用指南:AWS实战:轻松创建弹性IP,实现固定公网IP地址
  • 完整教程:自然语言处理项目之情感分析(下)
  • 还在为安装PS发愁?这款网页版工具,打开浏览器就能用!
  • 委托相关
  • 清除“请允许观看视频”通知页面的完整指南
  • 千亿芯片公司被股东“抛弃” ,AI芯片第一股前景几何?
  • Java 与智慧港口:航运调度与物流枢纽数字化
  • DeepSeek-V3.2-Exp 发布,训练推理提效,API 同步降价
  • 图片任意切割工具(Python 3.8 实现)
  • 从零构建能自我优化的AI Agent:Reflection和Reflexion机制对比详解与实现
  • 超精简的小型C编译器
  • Day1 Linux 入门:9 个核心命令(whoami/id/pwd 等)
  • 9.29 闲话
  • MMU的作用
  • 大二学计算机系统基础
  • 20250929 之所思 - 人生如梦
  • 9/29