死锁

死锁

死锁,就是说两个或两个以上的线程在执行的过程中,去争夺同一个共享资源导致相互等待的现象。如果没有外部干预,线程会一直处于阻塞状态,无法往下执行。这样一直等待处于阻塞状态的线程,被称为死锁线程。

产生死锁的原因

产生死锁需要同时满足以下四个条件:

  1. 互斥条件,共享资源a和b只能被一个线程占用
  2. 请求和保持条件,线程T1已经获取共享资源a,在等待共享资源b的时候,不释放共享资源a
  3. 不可抢占条件,其他线程不能强行抢占线程T1占有的资源
  4. 循环等待条件,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源,这形成了循环等待

如何避免死锁