什么是死锁?如何避免死锁?

概念

线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。

我和同学都打扫卫生,我拿着扫帚等他的簸箕,他拿着簸箕等我的扫帚

产生条件

  1. 互斥条件:同一时刻一线程只能占用一个资源。

    同一时刻,我拿着扫帚,他拿着簸箕。

  2. 请求与保持:一个线程因请求资源而阻塞时,对已获得的资源保持不放。

    我在等他的簸箕,但我不会让出我的扫帚

  3. 不可剥夺:已获得的资源在为使用完时,其他线程不能强行剥夺。

    我拿着扫帚,但是我不能去强抢他拿的簸箕

  4. 循环等待

    我拿着扫帚等他的簸箕,他拿着簸箕等我的扫帚,形成闭环

如何避免

打破产生条件即可

  1. 破坏 互斥条件:无法被破坏,因为锁就是通过互斥来解决线程安全问题
  2. 破坏 请求与保持条件:一次申请所有需要的资源
  3. 破坏 不可剥夺条件:如果线程已占用部分资源,且他还要申请其他资源,如果申请不到,就主动释放它自己占有的资源
  4. 破坏 循环等待条件:按照顺序申请资源,释放资源则逆序

参考:JavaGuide

Original: https://www.cnblogs.com/daydreamer-fs/p/16739190.html
Author: fogey
Title: 什么是死锁?如何避免死锁?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715071/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 通过js实现整屏滑动+全屏翻页+动画展示+线性图

    demo是模拟的一家教育机构的首页,当时学习的时候写的,主要实现的是整屏滑动,全屏翻页的效果,每次翻页都有动画的效果,内容嵌入了线性图和柱形图,代码实现稍微复杂,纯js实现的,如果…

    技术杂谈 2023年5月31日
    094
  • Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化

    重装完成之后,还是有很多问题,比如触摸屏的驱动没了,你要接上去鼠标之后操作 由于Surface只有一个USB口,你接了鼠标,就没法接键盘,所以要开启屏幕的软键盘,右击任务栏,勾选显…

    技术杂谈 2023年5月31日
    0166
  • 测试用例大全

    一、基本功能测试: 输入正确的用户名和密码登录成功 输入错误的用户名密码登录失败 用户名正确,密码错误,是否提示输入密码错误? 用户名错误,密码正常,是否提示输入用户名错误? 用户…

    技术杂谈 2023年7月23日
    0100
  • 高仿花生壳客户端程序(qt)

    高仿花生壳客户端程序 前言 设计的初想是在现场调试的时候,使用花生壳进行远程时,感觉类似花生壳这种程序的模板较为普遍,当时和同事打趣说一个星期内可以做出一摸一样的界面,回到公司正好…

    技术杂谈 2023年7月23日
    091
  • HTML5 Canvas Games All In One

    HTML5 Canvas Games All In One Canvas text window.onload = function() { var canvas = docume…

    技术杂谈 2023年6月1日
    0103
  • 微服务设计模式

    微服务可以对你的企业产生积极的影响。因此,值得了解如何处理 微服务架构(MSA)和一些微服务的设计模式,以及,微服务架构的一般目标或原则。以下是微服务架构方法中需要考虑的四个目标。…

    技术杂谈 2023年6月1日
    084
  • 从 jQuery 到 Vue3 的快捷通道

    当初使用 jQuery 做了几个简单的项目,算是有一点点了解,现在学习Vue3,发现了一个可以快速转换思维的通道 —— 使用CDN的方式模拟 Vite 建立的项目! CDN方式 j…

    技术杂谈 2023年5月31日
    0123
  • 关于随机森林进行多分类的一个思考

    机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别输出的类别的众树而定,它有着许多的有点,能很好地处理多分类问题。 基本算法 简要描述 随机森林,是用随机的…

    技术杂谈 2023年5月31日
    0135
  • Elasticsearch Analyzer 内置分词器

    Elasticsearch Analyzer 内置分词器 篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们 …

    技术杂谈 2023年7月10日
    0104
  • Flink Time

    基础概念 支持三种时间概念: Processing Time 时间递增 Ingestion Time : 摄入时间,数据进入Flink框架的时间,在Source Operator中…

    技术杂谈 2023年7月10日
    087
  • JAVA代码审计之xss

    @RestController @RequestMapping(value = "/xss") public class Xsstest { @Response…

    技术杂谈 2023年6月21日
    0100
  • c#常用快捷键

    相信.Net开发人员都想能够熟记各种VS快捷键以提高平时开发的效率,但苦于记忆能力太差而快捷键又特别多,特别烦,所以作罢! 下面我将简单介绍一下我记忆VS快捷键的一些方法,希望对大…

    技术杂谈 2023年7月24日
    0115
  • 高企必备项目—SSM框架项目CRM客户管理系统

    首先我们来了解一下什么是CRM客户管理系统? CRM系统包括一些核心的客户关系管理业务功能,如:潜在客户、客户管理、拜访管理、商机管理、订单管理等模块,满足企业客户关系信息化的要求…

    技术杂谈 2023年7月25日
    0103
  • 多线程06:条件变量

    与本文无关的知识联系: 一、call_once 函数模板, 第一个参数为标记,第二个参数为要调用的函数名,如test() 功能:保证写入第二个参数的函数(如test() )只能被调…

    技术杂谈 2023年7月25日
    0110
  • Visual Studio 打开程序提示仅我的代码怎么办

    工具–>选项—>调试—->常规–>禁用”启动仅我的代码” 本文为博主原创文章,未经博…

    技术杂谈 2023年5月31日
    0171
  • 500 ZuulException: Forwarding error

    com.netflix.zuul.exception.ZuulException: Forwarding error at org.springframework.cloud.ne…

    技术杂谈 2023年7月24日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球