美文网首页
什么是死锁?如何避免死锁?

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

作者: 欧子有话说_ | 来源:发表于2022-09-29 10:31 被阅读0次

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

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

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

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

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

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

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

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

循环等待

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

如何避免
打破产生条件即可

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

相关文章

  • JavaEE面试题总结 Day39 2018-12-29

    什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要...

  • java并发--java死锁

    本篇结构: 前言 什么是死锁 产生死锁的必要条件 死锁的代码示例 死锁排查 如何避免死锁 总结 一、前言 今天被问...

  • Java死锁

    什么是死锁 死锁检测 产生死锁的四个必要条件 如何避免死锁 死锁 死锁,指两个或多个线程之间,由于互相持有对方需要...

  • 什么是死锁,如何避免死锁

    死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去...

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

    所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推...

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

    概念线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期...

  • 死锁

    线程饥饿死锁 锁顺序死锁 动态锁顺序死锁通过锁顺序来避免死锁 避免死锁

  • jstack命令:教你如何排查多线程问题

    这是之前的一个死锁案例: 一个多线程死锁案例,如何避免及解决死锁问题? 如程序中发生这样的死锁问题该如何排查呢?我...

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

    死锁是什么,以及在并发程序中如何避免死锁一直是面试官偏爱的一个问题。本文尽量以最简洁的示例来帮助你快速理解,掌握死...

  • 死锁

    第11章:死锁和进程通信 死锁概念 死锁处理方法 死锁预防(Deadlock Prevention) 死锁避免(D...

网友评论

      本文标题:什么是死锁?如何避免死锁?

      本文链接:https://www.haomeiwen.com/subject/bmzhartx.html