温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Deadlock死锁是什么意思

发布时间:2026-09-19 08:22:19 来源:亿速云 阅读:110 作者:小樊 栏目:数据库

死锁(Deadlock) 是计算机科学(尤其是操作系统、数据库、并发编程)中的一个概念,指的是:两个或多个进程(或线程)在执行过程中,因为互相持有对方所需要的资源,并且都在等待对方释放资源,从而导致所有相关进程都无法继续执行的状态。

简单来说,就是“你等我放手,我等你放手,结果谁都动不了”。


一个生活中的例子

两个人面对面过独木桥:

  • A 站在桥上,等着 B 退回去;
  • B 站在桥上,等着 A 退回去;
  • 谁都不肯先退,结果两个人卡死在桥上。

这就是死锁。


技术上的典型例子

假设有两个线程 T1 和 T2,两把锁 L1 和 L2:

  • T1:先锁 L1,再想锁 L2
  • T2:先锁 L2,再想锁 L1

执行过程可能是:

  1. T1 拿到 L1
  2. T2 拿到 L2
  3. T1 等 L2(被 T2 拿着)
  4. T2 等 L1(被 T1 拿着)

→ 双方永久等待,发生死锁。


死锁产生的四个必要条件(经典定义)

必须同时满足以下四点才会死锁:

  1. 互斥条件:资源不能共享,只能由一个进程使用
  2. 占有并等待:进程已持有资源,还在等别的资源
  3. 不可抢占:资源只能由持有者主动释放,不能被强行拿走
  4. 循环等待:存在进程资源的循环等待链

只要破坏其中任意一个条件,死锁就可以避免或解除。


如何避免或解决死锁?

常见方法包括:

  • 固定加锁顺序(都先锁 L1 再锁 L2)
  • 一次性申请所有资源
  • 设置超时(拿不到就释放已有资源)
  • 死锁检测 + 回滚
  • 使用无锁结构或更高层并发工具

如果你是在 数据库、Java、操作系统考试或面试 的语境下问的,我也可以按对应场景给你讲。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手