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

(操作系统)死锁是什么 必要条件 解决方式

一、什么是死锁?

死锁(Deadlock) 是指两个或多个进程(或线程)在执行过程中,因争夺资源而造成一种相互等待的现象。
如果没有外力作用,它们将永远陷入等待,程序无法继续执行。

👉 简单来说:大家都在等别人先释放资源,结果谁也不释放,形成无限等待。


二、死锁产生的必要条件

根据操作系统理论,死锁产生必须同时满足以下四个条件

  1. 互斥条件

    • 资源在同一时间只能被一个进程占用。

    • 例如:一张数据库记录只能被一个事务持有锁。

  2. 占有且等待条件

    • 进程已经持有至少一个资源,同时还在等待其他资源。

    • 例如:线程 A 已经拿到了订单表的锁,还在等待库存表的锁。

  3. 不可剥夺条件

    • 已经获得的资源,不能被强行剥夺,只能主动释放。

  4. 循环等待条件

    • 存在一个进程—资源的环形等待链。

    • 例如:线程 A 等待 B 的资源,线程 B 等待 A 的资源,形成闭环。

⚠️ 死锁发生的必要条件是四个条件同时满足,如果破坏掉其中一个条件,就能避免死锁。


三、业务场景举例

📍 电商下单场景

  • 线程 A:先锁定订单表 → 再等待库存表。

  • 线程 B:先锁定库存表 → 再等待订单表。
    结果:两个线程互相等待对方释放锁 → 死锁。


四、死锁的解决方式

  1. 预防死锁(避免四个条件之一)

    • 破坏“循环等待”:规定所有线程必须按照统一的顺序申请资源,例如必须先锁库存表,再锁订单表。

    • 破坏“占有且等待”:要求进程一次性申请所需资源。

    • 破坏“不可剥夺”:如果申请不到资源,就主动释放已持有的资源。

  2. 避免死锁(动态检测)

    • 通过算法(如银行家算法)在分配资源前进行检测,确保系统不会进入不安全状态。

  3. 检测并解除死锁

    • 定期检测是否存在环形等待。

    • 一旦检测到死锁,选择“牺牲者”进程强制中止,释放资源。

  4. 实际工程手段

    • 加锁顺序一致:所有业务代码按统一顺序获取锁。

    • 锁超时机制:等待超时自动回滚,释放资源。

    • 乐观锁(版本号机制):避免长时间持有锁。


五、总结

  • 死锁是并发编程中常见的棘手问题,必须理解其 四个必要条件

  • 解决死锁的核心思想是 破坏死锁条件避免环形等待

  • 在实际业务中,更常用的是 加锁顺序统一、加锁超时、乐观锁 等工程化手段。

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

相关文章:

  • 5分钟发布技术博客:cpolar简化Docsify远程协作流程
  • 《 nmcli网络管理学习》
  • [新启航]医疗器械深孔加工:新启航激光频率梳攻克 130mm 深度,实现 2μm 精度测量
  • Windows Server 2019 DateCenter搭建 FTP 服务器
  • MOLEX莫仕/莫莱克斯借助PCIe发展,引领数据中心的未来
  • 从Java全栈到前端框架的深度探索
  • gte2_common的作用
  • 数据集成平台-Kafka实时同步Doris能力演示
  • Appium学习笔记
  • 如何判断投手甲的认知比投手乙高?
  • “华生科技杯”2025年全国青少年龙舟锦标赛在海宁举行
  • 暴雨蓝色预警发布:我国多地将迎强降雨,局地伴有强对流天气 疾风气象大模型
  • 《李沐读论文》系列笔记:论文读写与研究方法【更新中】
  • 【机器学习】(11) --回归树算法
  • 【机器学习基础】朴素贝叶斯算法详解:从原理到实战
  • 机器学习-朴素贝叶斯
  • 机器学习采样方法深度详解:过采样、下采样与混合采样(附完整代码、可视化与多场景实战)
  • 机器学习:贝叶斯派
  • 【Linux | 网络】多路转接IO之poll
  • 编写Linux下usb设备驱动方法:usb设备驱动实现流程
  • AI-调查研究-60-机器人 机械臂技术发展趋势详解:工业、服务与DIY三大阵营全解析
  • rabbitmq集群
  • 基于RFM模型的客户群体大数据分析及用户聚类系统的设计与实现
  • AI+数据库:国内DBA职业发展与国产化转型实践
  • Torch入门小知识点--总结性语言
  • CSS基础学习第一天
  • The Google File System 详解
  • 【Docker基础】Docker-compose进阶配置:健康检查与服务就绪
  • 一、添加Viewport3DX,并设置相机、灯光
  • Java-包装类