死锁相关知识

死锁是什么

死锁(Deadlock)是指两个或多个进程(或线程)在执行过程中,因为互相等待对方释放资源,导致永远无法继续执行的状态。


✅ 死锁的形成条件(必须同时满足以下四个):

  1. 互斥:资源一次只能被一个进程占用。
  2. 占有且等待:一个进程持有一部分资源,同时又在等待其他资源。
  3. 不剥夺:已分配的资源不能被强制回收,只能由占有者释放。
  4. 循环等待:多个进程形成一种资源循环等待关系。

只要这四个条件都成立,系统就可能出现死锁。


🎮 举个简单的例子(游戏开发中常见的场景):

假设两个线程:

  • 线程A 先拿到了资源1,然后想拿资源2;
  • 线程B 先拿到了资源2,然后想拿资源1。

此时两个线程都在等待对方释放资源,谁也无法继续执行,程序就卡死了,这就是死锁。


🔧 如何避免死锁:

  1. 避免循环等待:统一资源申请顺序。
  2. 使用超时机制:获取资源时设置超时时间,超时就放弃,避免一直等待。
  3. 使用资源调度算法:如银行家算法,提前评估系统资源状态。
  4. 尽量减少锁粒度:用更细的锁、减少持锁时间。

🧪 在游戏测试中的表现:

  • 某些界面卡住不动;
  • 某些多人游戏房间无法开始战斗;
  • 服务端CPU飙高但没有响应;
  • 日志中反复出现线程等待或资源请求。

总结一句话:
死锁是一种程序互相"卡脖子"的状态,既不报错也不崩溃,但永远无法继续运行。 测试人员发现这种情况后,要重点看线程堆栈、日志锁等待记录,并配合开发定位原因。

相关推荐
老神在在00139 分钟前
保姆级教程:Pytest + Allure 接口自动化测试从 0 到 1 完整指南(含环境搭建、用例编写、报告生成、报错排坑全流程)
pycharm·pytest·测试
行者-全栈开发1 小时前
【运维安全】CVE-2026-23918:Apache HTTP/2双重释放漏洞深度剖析与修复指南
网络协议·漏洞修复·内存安全·双重释放·cve-2026-23918·apache http/2·double free
沧州刺史1 小时前
有域名但是没有带公网IP的服务器,怎么能够让服务通过域名暴露出去?
服务器·网络协议·tcp/ip·cloudflared
顶点多余2 小时前
基于tcp服务器实现远程命令操作功能
网络·网络协议·tcp/ip
pengyi8710152 小时前
HTTP与HTTPS代理基础区别,协议原理通俗解析
网络·爬虫·网络协议·tcp/ip·智能路由器
专注VB编程开发20年2 小时前
轻量级多进程消息收发模型WEBSOCKET,MQTT
网络·websocket·网络协议
东风微鸣4 小时前
Ubuntu 26.04 游戏配置指南:魔兽争霸3 Dota1
linux·ubuntu·游戏
liulilittle13 小时前
TCP BBR 拥塞控制模块编译
网络·网络协议·tcp/ip
wangl_9214 小时前
Modbus RTU 与 Modbus TCP 深入指南-功能码与数据模型
网络·网络协议·tcp/ip·tcp·modbus·rtu
阿斯加德D14 小时前
PCL2下载我的世界minecraft Java版启动器2026最新版分享
测试工具·游戏·游戏程序