死锁相关知识
死锁是什么
死锁(Deadlock)是指两个或多个进程(或线程)在执行过程中,因为互相等待对方释放资源,导致永远无法继续执行的状态。
✅ 死锁的形成条件(必须同时满足以下四个):
- 互斥:资源一次只能被一个进程占用。
- 占有且等待:一个进程持有一部分资源,同时又在等待其他资源。
- 不剥夺:已分配的资源不能被强制回收,只能由占有者释放。
- 循环等待:多个进程形成一种资源循环等待关系。
只要这四个条件都成立,系统就可能出现死锁。
🎮 举个简单的例子(游戏开发中常见的场景):
假设两个线程:
- 线程A 先拿到了资源1,然后想拿资源2;
- 线程B 先拿到了资源2,然后想拿资源1。
此时两个线程都在等待对方释放资源,谁也无法继续执行,程序就卡死了,这就是死锁。
🔧 如何避免死锁:
- 避免循环等待:统一资源申请顺序。
- 使用超时机制:获取资源时设置超时时间,超时就放弃,避免一直等待。
- 使用资源调度算法:如银行家算法,提前评估系统资源状态。
- 尽量减少锁粒度:用更细的锁、减少持锁时间。
🧪 在游戏测试中的表现:
- 某些界面卡住不动;
- 某些多人游戏房间无法开始战斗;
- 服务端CPU飙高但没有响应;
- 日志中反复出现线程等待或资源请求。
总结一句话:
死锁是一种程序互相“卡脖子”的状态,既不报错也不崩溃,但永远无法继续运行。 测试人员发现这种情况后,要重点看线程堆栈、日志锁等待记录,并配合开发定位原因。