美文网首页
什么是死锁和如何解决死锁

什么是死锁和如何解决死锁

作者: 乐百事52淑熙 | 来源:发表于2018-04-23 15:12 被阅读0次

如果一组进程中每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。

举例来说:有两个进程A和B,A持有资源a等待b资源,B持有资源b等待a资源,两个进程都在等待另一个资源的同时不释放资源,就形成死锁。

形成死锁的四个必要条件:

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

处理死锁的思路如下:

预防死锁:破坏四个必要条件中的一个或多个来预防死锁

避免死锁:在资源动态分配的过程中,用某种方式防止系统进入不安全的状态。

检测死锁:运行时产生死锁,及时发现思索,将程序解脱出来。

解除死锁:发生死锁后,撤销进程,回收资源,分配给正在阻塞状态的进程。

预防死锁的办法:

破坏请求和保持条件:1.一次性的申请所有资源。之后不在申请资源,如果不满足资源条件则得不到资源分配。2.只获得初期资源运行,之后将运行完的资源释放,请求新的资源。

破坏不可抢占条件:当一个进程获得某种不可抢占资源,提出新的资源申请,若不能满足,则释放所有资源,以后需要,再次重新申请。

破坏循环等待条件:对资源进行排号,按照序号递增的顺序请求资源。若进程获得序号高的资源想要获取序号低的资源,就需要先释放序号高的资源。

死锁的解除办法:

1、抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。

2、终止(撤销)进程:将一个或多个思索进程终止(撤销),直至打破循环环路,使系统从死锁状态解脱。

个人公号:【排骨肉段】,可以关注一下。

相关文章

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

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

  • java并发--java死锁

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

  • 什么是死锁和如何解决死锁

    如果一组进程中每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。 举例来说:有两个进...

  • Java死锁

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

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

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

  • 如何快速排查死锁?如何避免死锁?

    前言 相信程序员都会碰上这样的问题,Java死锁如何排查?又如何解决呢?那么,何为死锁呢?死锁是指两个或两个以上的...

  • 为何出现死锁

    为何出现 jps 和 jstack 工具查看死锁如何解决

  • Mysql学习(六) 行锁

    行锁、死锁、死锁监测 两阶段协议锁,如何安排正确的事务语句,可能影响并发度的锁尽量往后放 死锁和死锁监测,如何减少...

  • 死锁 deadLock

    什么是死锁 如果两个线程互相持有对方获得的锁 并尝试获得对方的那把锁 就会造成死锁 死锁的示例代码 死锁如何使用j...

  • SQL Server 死锁问题的分析

    摘要:SQL Server死锁的捕获、分析和解决方法。 一、什么是死锁? 简单来说,我和你,金锁和银锁。 我拿着金...

网友评论

      本文标题:什么是死锁和如何解决死锁

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