死锁概念

简介: 本章讲解什么是死锁以及如何解决

1、什么是死锁

死锁,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。

如果没有外部干预,线程会一直阻塞无法往下执行,这些一直处于相互等待资源的线程就称为死锁线程。

2、导致死锁的原因

导致死锁的条件有四个,也就是这四个条件同时满足就会产生死锁。

  • 互斥条件,共享资源 X 和 Y 只能被一个线程占用;
  • 请求和保持条件,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X;
  • 不可抢占条件,其他线程不能强行抢占线程 T1 占有的资源;
  • 循环等待条件,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。

3、怎么解决

导致死锁之后,只能通过人工干预来解决,比如重启服务,或者杀掉某个线程。所以,只能在写代码的时候,去规避可能出现的死锁问题。

按照死锁发生的四个条件,只需要破坏其中的任何一个,就可以解决,但是,互斥条件是没办法破坏的,因为这是互斥锁的基本约束,其他三方条件都有办法来破坏:

  • 对于“请求和保持”这个条件,我们可以一次性申请所有的资源,这样就不存在等待了。
  • 对于“不可抢占”这个条件,占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样不可抢占这个条件就破坏掉了。
  • 对于“循环等待”这个条件,可以靠按序申请资源来预防。所谓按序申请,是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的,这样线性化后自然就不存在循环了。
相关文章
|
缓存 搜索推荐 索引
「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用
在鸿蒙应用开发中,Image 组件用于加载和显示图片资源,并提供多种属性来控制图片的显示效果和适配方式。本篇将带你学习如何在鸿蒙应用中加载本地和远程图片、设置图片样式以及实现简单的图片轮播功能。
888 7
「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用
|
人工智能
生成式人工智能认证(GAI认证)官网 - 全国统一认证中文服务平台上线
生成式人工智能(AI)正深刻改变职场规则,但系统化学习相关技术成为难题。近日,由全球知名教育公司培生推出的生成式人工智能认证(GAI认证)中文官网正式上线,为专业人士和学习者提供了权威解决方案。该认证涵盖核心技能、提示工程、伦理合规等内容,助力持证者紧跟技术前沿,在职场中脱颖而出。全国统一认证平台提供便捷报名与在线考试服务,考后快速出成绩并颁发证书。行动起来,开启AI职业新篇章!
|
数据采集 人工智能 自然语言处理
全球首篇!调研近400篇文献,鹏城实验室&中大深度解析具身智能
【8月更文挑战第17天】在人工智能领域,具身智能正成为研究焦点。它强调智能体在现实世界中的感知与交互。近期,鹏城实验室与中山大学联合发布的首篇全球具身智能综述,调研近400篇文献,总结了该领域的理论和技术进展。文章探讨了具身感知、交互及仿真到现实的适应性等关键议题,并指出了面临的挑战如数据质量、模型泛化等,为通向通用人工智能铺路。论文已发表于IEEE会议记录中。
790 60
|
存储 监控 安全
建立有效的反馈机制
建立有效的反馈机制
1499 6
|
安全 Java Python
instanceof 的实现原理
`instanceof` 是 Java 中的一个关键字,用于判断一个对象是否属于某个类或其子类。其原理是通过检查对象的类层次结构,确定该对象是否是指定类的实例。具体实现涉及对象头中的类元数据信息和类加载器的作用。
|
存储 索引 Python
从中序与后序遍历序列构造二叉树
【10月更文挑战第13天】这段内容介绍了一种基于中序和后序遍历序列构建二叉树的方法。通过识别后序遍历中的根节点,并利用中序遍历划分左右子树,进而递归构建整棵树。文中提供了具体示例及Python代码实现,并分析了该方法的时间与空间复杂度。
645 0
|
数据可视化
8个常见的数据可视化错误以及如何避免它们
本文揭示了8个数据可视化常见错误:误导色彩对比、过多的数据图表、省略基线、误导性标签、错误的可视化方法、不实的因果关系、放大有利数据和滥用3D图形。强调清晰、准确和洞察力的重要性,提醒制作者避免使用过多颜色、一次性展示大量数据、错误图表类型以及展示无关相关性等。正确可视化能有力支持决策,不应牺牲真实性以追求视觉效果。
1602 6
|
域名解析 缓存 网络协议
理解DNS的重要性与影响
【8月更文挑战第24天】
715 0
|
负载均衡 Cloud Native Java
一文搞懂微服务架构之注册中心
介绍两种微服务架构中比较流行的注册中心:Consul、Nacos
一文搞懂微服务架构之注册中心
|
监控
多线程并发之读写锁(ReentranReadWriteLock&ReadWriteLock)使用详解
多线程并发之读写锁(ReentranReadWriteLock&ReadWriteLock)使用详解
516 0

热门文章

最新文章