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 关于线程死锁

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