Android 关于线程死锁

作者: 行者_zm | 来源:发表于2019-01-11 08:51 被阅读19次

死锁:

死锁是指两个或两个以上的进程进在执行过程中,由于资源竞争或由于相互通信而造成的一种阻塞式现象,如果没有外力影响。那么它们将永远的持续下去, 此事称系统产生死锁现象,这种永远互相在等待的进程成为死锁。

死锁的四个产生必要条件:

1、互斥条件:进程对所分配到的资源具有排他性使用,一段时间内某资源只由一个进程所占有。若此时还有其他请求资源,则请求者只能等待,知道占有资源的进程使用完毕释放。

2、请求和保持条件:进程已经保持至少一个资源,但是又提出心得资源请求,而该资源已经被其他进程所占有,此时请求进程阻塞,但又对自己已经获得的其他资源保持不变。

3、不可剥夺条件:进程获得的资源,在未使用完之前,不能被剥夺,只能在使用完时有自己释放。

4、环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。

死锁的产生原因:

1、竞争资源引起进程死锁:当系统中供多个进程共享的资源例打印机、公用队列等,其数目不足以满足进程的需要时,会引起诸进程对资源的竞争而产生死锁。

2、可剥夺与不可剥夺资源

3、竞争不可剥夺资源:当系统所配置的不可剥夺资源,由于数量不能满足诸进程运行的需要时,会使进程在运行过程中,因争夺这些资源而陷入僵局。

4、竞争临时资源:打印机等为可顺序重复使用性资源,称为永久资源。还有一种临时资源,就是由一个进程产生,被另外一个进程使用,短时间内后便没有用的资源,也称为消耗性资源。

处理死锁的基本方法:

1.死锁预防:通过设置某些限制条件,去破坏死锁的四个条件中的一个或几个条件,来预防发生死锁。但由于所施加的限制条件往往太严格,因而导致系统资源利用率和系统吞吐量降低。

2.死锁避免:允许前三个必要条件,但通过明智的选择,确保永远不会到达死锁点,因此死锁避免比死锁预防允许更多的并发。

3.死锁检测:不须实现采取任何限制性措施,而是允许系统在运行过程发生死锁,但可通过系统设置的检测机构及时检测出死锁的发生,并精确地确定于死锁相关的进程和资源,然后采取适当的措施,从系统中将已发生的死锁清除掉。

4.死锁解除:与死锁检测相配套的一种措施。当检测到系统中已发生死锁,需将进程从死锁状态中解脱出来。常用方法:撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程。死锁检测盒解除有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。

死锁预防:破坏死锁的四个条件中的一个或几个。

(1)互斥:它是设备的固有属性所决定的,不仅不能改变,还应该加以保证。

(2)占有且等待:

为预防占有且等待条件,可以要求进程一次性的请求所有需要的资源,并且阻塞这个进程直到所有请求都同时满足。这个方法比较低效。

(3)不可抢占:

预防这个条件的方法:

*如果占有某些资源的一个进程进行进一步资源请求时被拒绝,则该进程必须释放它最初占有的资源。

*如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另外一个进程,要求它释放资源。

(4)循环等待:通过定义资源类型的线性顺序来预防。

*如果一个进程已经分配了R类资源,那么接下来请求的资源只能是那些排在R类型之后的资源类型。该方法比较低效。

相关文章

  • Android 关于线程死锁

    死锁: 死锁是指两个或两个以上的进程进在执行过程中,由于资源竞争或由于相互通信而造成的一种阻塞式现象,如果没有外力...

  • 去掉锁屏后Android启动死锁问题

    android系统启动死锁 去掉KeyGuard 后,android系统启动有几率发生死锁,堆栈如下,2个线程互相...

  • “锁”的性能和优化

    一、死锁 关于死锁,无外乎,对线程资源的争抢,线程之间相互等待对方释放资源,从而导致等待的一种情况。 出现死锁的条...

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

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

  • Python中的各种锁

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

  • 5. 死锁

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

  • 死锁

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

  • 6. 使用synchronized实现死锁

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

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

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

  • 十.Java并发编程的挑战

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

网友评论

    本文标题:Android 关于线程死锁

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