标签:linux、死锁
死锁:一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程 会挂起等待别的线程释放锁,然而锁正是被自己占用着的,该线程又被挂起而没有机会释放锁, 因此 就永远处于挂起等待状态了,这叫做死锁(Deadlock)。
另一种典型的死锁情形是这样:线 程A获 得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程 B释放 锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线 程A和B都 永远处于挂起状态了。
死锁产生的四个必要条件
(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