linux中的死锁

    死锁:通常状况下,若是同一个线程前后两次调用lock,在第二次调用时,因为锁已经被占用,该线程 会挂起等待别的线程释放锁,然而锁正是被本身占用着的,该线程又被挂起而没有机会释放锁, 所以 就永远处于挂起等待状态了,这叫作死锁(Deadlock)。ide

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

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

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

2.常见产生死锁的缘由队列

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

3.规避死锁的方法ci

 (1)忽略该问题。资源

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

相关文章
相关标签/搜索