多线程死锁


死锁原因

  1. 系统资源不足
  2. 线程运行顺序不合适
  3. 资源分配不当


必要条件

  1. 互斥条件:一个资源只能被一个线程使用
  2. 请求和保持条件:一个线程因请求资源而阻塞时,对已获的资源保释不放
  3. 不剥夺条件:线程已获得的资源,在未使用完之前不能强行剥夺
  4. 循环等待条件:若干线程之间形成一种首尾相接的循环等待资源关系


预防死锁

  1. 资源一次性分配:(破坏请求和保持条件)
  2. 可剥夺资源:当某线程新的资源未满足时,释放已占有资源(破坏不剥夺条件)
  3. 资源有序分配法:给每个资源赋予一个编号,每一个线程按照编号递增的顺序请求资源,释放则相反(破坏循环等待条件)


解除死锁

  1. 撤销限于死锁的全部线程
  2. 逐个撤销限于死锁的线程,直到死锁不存在
  3. 从陷于思所得线程中逐个强迫放弃所占有的资源
  4. 从另外一些线程那里强行剥夺足够数量的资源分配给死锁的线程,以解除死锁状态
posted @ 2012-10-24 11:51  rilley  阅读(386)  评论(1编辑  收藏  举报