死锁的相关概念

来源:互联网 发布:修改手机mac软件 编辑:程序博客网 时间:2024/05/17 07:47

死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。
典型的死锁情形:1.如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁正是被自己占⽤着的,该线程又被挂起而没有机会释放锁,因此就永远处于挂起等待状态了;2.线程A获得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和B都永远处于挂起状态了。
死锁产生的必要条件:
1.互斥条件:资源是独占的且排他使用。任一时刻临界资源只能给一个进程(线程)使用。
2.不可剥夺条件:进程(线程)所获得的资源在未使用完毕之前不能被其他进程(线程)强行剥夺。
3.请求和保持条件:进程(线程)每次申请它所需要的一部分资源,在申请新资源的同时,继续占用已分配的资源。
4.循环等待条件:发生死锁时,必然存在一个进程(线程)等待对列{P1,P2,P3,···,Pn},P1等待P2占有的资源,P2等待P3占有的资源,···,Pn等待P1占有的资源。即形成一个进程(线程)等待环路,环路中每个进程(线程)已占有的资源同时被另一个进程(线程)所申请。
如何避免死锁呢?
在资源的动态分配过程中,采取某种方法防止系统进入不安全状态,从而避免死锁的发生。以较弱的限制条件为代价而获取较高安全的资源利用。
常用的方法:
(1)设置等待超时,当一个线程拿起A资源,等待B资源的时候,如果等待的时间过长则超时,释放A资源,重新等待。
(2)如果线程需要AB两个资源,等待A资源的时候阻塞,然后判断B资源是否可以使用,如果B资源正在被别的线程使用,那么该线程就释放A资源,不阻塞,重新排队等待。

0 0
原创粉丝点击