码迷,mamicode.com
首页 > 系统相关 > 详细

linux中的死锁

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

标签:linux、死锁

    死锁:一般情况下,如果同一个线程先后两次调用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中的死锁

标签:linux、死锁

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!