OS之《死锁》
什么是死锁
一组进程中的每一个进程都在等待仅由该组进程中其他进程才能引发的事件,这样就形成死锁了。
死锁的原因
- 竞争不可抢占的资源
- 竞争可消耗资源
- 进程推进顺序不当
死锁产生的必要条件
1.互斥条件:对资源互斥访问
2.请求和保持:进程已经拥有了一个资源,还需要拥有其他资源,此时其他资源被占用,进程阻塞。导致持有的资源保持不放
3.不可抢占:进程已经获取的资源在没有使用完之前是不能被释放的。只能等到进程完成时自己释放。
4.循环等待:
死锁的处理方式
预防死锁:
- 破坏请求保持的条件:请求多个资源的时候,只要有一个资源没有获取到,及时其他资源有,也不持有。
- 破坏不可抢占的条件:一个进程处于请求保持的时候,其他进程有权利释放他持有的资源,等到它再运行时,重新获取资源即可
- 破坏循环等待的条件:对资源进行标号,对资源获取只能按照标号的大小顺序获取,不能出现颠倒。
避免死锁:
- 银行家算法避免死锁
检查死锁:
- 资源分配图:入度边和出度边只能等于资源大小,就不会出现死锁。大于资源大小就会出现死锁
解除死锁:
- 资源抢占:从其他进程抢占资源,分配给死锁进程
- 终止进程:撤销一个或多个死锁进程,释放资源
本文来自博客园,作者:Eular,转载请注明原文链接:https://www.cnblogs.com/euler-blog/p/18599616
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南