美文网首页
线程中的死锁

线程中的死锁

作者: 福later | 来源:发表于2018-07-02 09:34 被阅读0次

死锁定义:若一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的

产生死锁的必要条件:(以下4个条件任一个不成立,死锁就不会发生)
(1)互斥条件:在一段时间内,某资源只能被一个进程占用;
(2)请求和保持条件:进程已拥有了至少一个资源,但又提出了新的资源请求,而该资
源已被其它进程占用,此时请求进程被阻塞,但对自己已获得资源保持不放;
(3)不可抢占条件:进程已获得资源在未使用完之前不能被抢占,只能进程使用完之后
自己释放;
(4)循环等待条件:进程集合{p0,p1,p2,...}中p0在等待一个被p1占用的资源,p1等待一
个被p2占用的资源,...pn等待被p0占用的资源;
如何预防死锁?
(1)破坏“请求和保持”条件
第一种协议:所有进程在开始运行之前,必须一次性地申请其在整个运行过程所需
要的全部资源;
第二种协议:它允许一个进程只获得运行初期所需的资源后,便开始运行。进程运
行过程中再逐步释放已分配给自己的、且已用完的全部资源,然后再请求新的所需
资源;
(2)破坏“不可抢占”条件
当一个已经保持了某些不可被抢占资源的进程,提出新的资源请求而不能得到满足
时,它必须释放已经保持的所有资源,待以后需要时再重新申请;
(3)破坏“循环等待”条件
对资源进行线性排序,并赋予不同的序号,规定每个进程必须按序号递增的顺序请
求资源;
如何避免死锁?
系统处于安全状态时,可避免死锁的发生。
安全状态:指进程能够按照某种进程推进顺序(p0,p1,p2,...)为每个进程pi分配其
所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺序地完成,此
时称(p0,p1,p2,...)为安全序列,若进程中找不到这样一个安全序列,则进程处于
不安全状态,进程处于不安全状态,易造成死锁。
可利用银行家算法避免死锁;
银行家算法思想:每一个进程在运行之前,必须申明在运行过程中,可能需要的每
种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量,当进程请求
一些资源时,系统必须首先确定是否有足够的资源分配给该进程,若有,再进一步
计算在将这些资源分配给进程后,是否会使系统处于不安全状态,若不会,才将资
源分配给它,否则让进程等待。

相关文章

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

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

  • Python中的各种锁

    Python之死锁 死锁分为两种情况,多进程/线程的死锁.或者是单线程的死锁. 1.首先看一下单线程的死锁,单线程...

  • 5. 死锁

    线程死锁 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序...

  • 线程中的死锁

    死锁定义:若一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的 产生死锁的...

  • Java多线程-死锁的出现和解决

    Java多线程-死锁什么是死锁? 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释...

  • 6. 使用synchronized实现死锁

    死锁定义 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序...

  • Android死锁的场景有哪些?

    常见的死锁的场景 下面分析几种常见的死锁形式: 锁顺序死锁 上述代码中,如果一个线程调用lockAtoB(),另一...

  • 面试官:连多线程问题你都一问三不知,还要我怎么“放水”?

    面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁......

  • 死锁

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

  • 十.Java并发编程的挑战

    1. 死锁 线程死锁 死锁是指两个或多个线程被阻塞等待获取某些其他线程所持有的锁。当多个线程同时需要相同的锁,但以...

网友评论

      本文标题:线程中的死锁

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