首页 > 系统服务 > 详细

linux中的死锁

时间:2016-07-15 13:57:23      阅读:208      评论:0      收藏:0      [点我收藏+]

    死锁:一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程 会挂起等待别的线程释放锁,然而锁正是被自己占用着的,该线程又被挂起而没有机会释放锁, 因此 就永远处于挂起等待状态了,这叫做死锁(Deadlock)。

    另一种典型的死锁情形是这样:线 程A获 得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程 B释放 锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线 程A和B都 永远处于挂起状态了。

  1. 死锁产生的四个必要条件

    (1)互斥使用(资源独占) 
    一个资源每次只能给一个进程使用 。
    (2)不可强占(不可剥夺) 
    资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放 。
    (3)请求和保持(部分分配,占有申请) 
    一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)。 
    (4)循环等待 
    存在一个进程等待队列 {P1 , P2 , … , Pn}, 其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路。

2.常见产生死锁的原因

     (1) 因为系统资源不足。
   (2) 进程运行推进的顺序不合适。
   (3) 资源分配不当。

3.规避死锁的方法

 (1)忽略该问题。

 (2)检测死锁并且恢复。
 (3)仔细地对资源进行动态分配,以避免死锁。
 (4)通过破除死锁四个必要条件之一,来防止死锁产生。



linux中的死锁

原文:http://11451519.blog.51cto.com/11441519/1826537

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!