死锁产生的条件
- 互斥条件:指线程对已经获取到的资源进行排它性使用,即该资源同时只由一个线程占用,如果此时还有其他线程请求获取该资源,则请求者只能等待,直至占有资源的线程释放该资源。
- 请求并持有条件:指一个线程已经持有了至少一个资源,但又提出了新的资源请求,而新资源已经被其他线程占有,所以当前线程被阻塞,但阻塞的的同事并不释放已经获取的资源。
- 不可剥夺条件:指线程获取到的资源在自己使用完之前不能被其他线程抢占,只有自己使用完毕才由自己释放该资源。
- 环路等待条件:指在发生死锁时,必然存在一个线程—资源的环形链,即线程集合{T0, T1,T2, ..., Tn} 中的T0正在等待一个T1占用的资源,T2在等待T2占用的资源, Tn正在等待T0占用的资源。
避免死锁
通过破坏资源的请求并持有条件和环路等条件。