首页 > 其他分享 >什么是死锁?如何避免死锁?

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

时间:2022-09-28 18:48:35浏览次数:75  
标签:互斥 避免 如何 死锁 线程 扫帚 资源 簸箕

概念

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

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

产生条件

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

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

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

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

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

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

  4. 循环等待

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

如何避免

打破产生条件即可

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

参考:JavaGuid

标签:互斥,避免,如何,死锁,线程,扫帚,资源,簸箕
From: https://www.cnblogs.com/daydreamer-fs/p/16739190.html

相关文章

  • 如何实现数据库读一致性
    1导读数据的一致性是数据准确的重要指标,那如何实现数据的一致性呢?本文从事务特性和事务级别的角度和大家一起学习如何实现数据的读写一致性。2一致性1.数据的一致性:通常指......
  • 如何实现数据库读一致性
    1导读数据的一致性是数据准确的重要指标,那如何实现数据的一致性呢?本文从事务特性和事务级别的角度和大家一起学习如何实现数据的读写一致性。2一致性1.数据的一致性:通常指......
  • 如何实现Android平台GB28181设备对接Camera2数据
    技术背景在写如何实现Android平台GB28181设备对接Camera2数据说明之前,我在前两年的blog就有针对camera2的RTMP直播推送模块做过技术分享:在Google推出Android5.0的时候,An......
  • Prometheus Alertmanager如何配置externalURL和generatorURL?
    在promethes和alertmanager启动的时候,都加上--web.external-url就可以了./prometheus--config.file=prometheus.yml--web.external-url=http://x.x.x.x:9090./alertma......
  • 如何学英语?
    2022年9月28日~如何记单词记单词不能脱离句子不能贪多先熟悉单词的意思(见到这个单词能知道单词的意思),而不是拼写、发音、用法一股脑全都搞定记单词最有效的方......
  • 如何提取 IOS Document_apis
    关于IOS私有库的搭建,⽹上的教程很少,目前为止,发现的⼀个⽐较好的⽂章,是教你私有库的搭建和扫描,但是⽂章因为存在时间⽐较⻓,套在现在框架中,难免有些不适⽤,我就在⼤神(Deft_MK......
  • [答疑]EA如何导出黑白图片,无阴影,无填充色
    火星(16**3041)2012-09-2615:40:59潘老师,各位大侠,请教一下EA如何导出黑白图片,无阴影,无填充色...潘加宇(3504847)2012-09-2615:41:34试试Diagram-SaveImage可以吗火星......
  • [答疑]序列图如何表示“审核不通过则回到初始步骤”的循环流程
    xieh2021-1-1318:09潘老师您好,请教一个问题我在制作签订合同用例的业务序列图。业务要求:地市合同起草人起草合同,地市、省分、总部三级领导审批。每级审批不通过,都要回到起......
  • Vue3.0 如何写自定义指令
    背景问:什么是指令?答:指令就是DOM与逻辑行为的媒介,本质就是DOM绑定的独立逻辑行为函数。除了核心功能默认内置的指令(例如v-model和v-show),Vue也允许注册自定义指令。Vu......
  • 如何通过 C#/VB.NET 代码将 Excel 工作表拆分为单独的文件
    随着数据的不断扩大,有的数据表的规模会以几何级增长,当数据达到一定规模时,数据的查询,读取性能就会变得缓慢,这时就需要拆分数据表,接下来在文章中将为大家详细介绍您将学习如何......