多线程死锁
死锁原因
- 系统资源不足
- 线程运行顺序不合适
- 资源分配不当
必要条件
- 互斥条件:一个资源只能被一个线程使用
- 请求和保持条件:一个线程因请求资源而阻塞时,对已获的资源保释不放
- 不剥夺条件:线程已获得的资源,在未使用完之前不能强行剥夺
- 循环等待条件:若干线程之间形成一种首尾相接的循环等待资源关系
预防死锁
- 资源一次性分配:(破坏请求和保持条件)
- 可剥夺资源:当某线程新的资源未满足时,释放已占有资源(破坏不剥夺条件)
- 资源有序分配法:给每个资源赋予一个编号,每一个线程按照编号递增的顺序请求资源,释放则相反(破坏循环等待条件)
解除死锁
- 撤销限于死锁的全部线程
- 逐个撤销限于死锁的线程,直到死锁不存在
- 从陷于思所得线程中逐个强迫放弃所占有的资源
- 从另外一些线程那里强行剥夺足够数量的资源分配给死锁的线程,以解除死锁状态