死锁是多个线程在运行过程中互相竞争资源发生的僵局,若无外力作用,它们都无法推进下去。死亡如风,常伴吾身。窝窝头,嘿嘿!
死锁的四个必要条件
互斥条件:一个资源每次只能被一个进程使用。
请求和保持条件:一个进程因为请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已经获得的资源在没有使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
解决死锁的基本方法
预防死锁:
1)资源一次性分配:一次性分配所有资源,这样就不会有请求了(破坏请求条件)
2)只要有一个资源得不到分配,就不给这也进程分配其他的资源(破坏保持条件)
3)可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不剥夺条件)
4)资源有序分配法:系统给每个资源赋予一个编号,每一个进程按照编程递增的顺序请求资源,释放则相反(破坏环路等待条件)
解除死锁:
常用的有:
1)剥夺资源:从其他进程剥夺足够数量的资源给死锁进程,以解除死锁状态;
2)撤销进程:可以直接撤销死锁进程或撤销代价最小的进程,直至有足够的资源可用;