线程死锁怎么产生的以及如何避免

死锁产生的四个必要条件:

  • 互斥:一个资源每次只能被一个进程使用(资源独立)
  • 请求与保持:一个进程因请求资源而阻塞时,对已获得的资源保持不放(不释放锁)
  • 不剥夺:进程已获得的资源,在未使用之前,不能强行剥夺(抢夺资源)
  • 循环等待:若干进程之间形成一种头尾相接的循环等待的资源关闭(死循环)

避免死锁的方法:

  • 第一个条件 "互斥" 是不能破坏的,因为加锁就是为了保证互斥
  • 一次性申请所有的资源,破坏 "占有且等待" 条件
  • 占有部分资源的线程进一步申请其他资源时,如果申请不到,主动释放它占有的资源,破坏 "不可抢占" 条件
  • 按序申请资源,破坏 "循环等待" 条件
posted @   joshua317  阅读(88)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示