死锁:如果有一组线程,每个线程都在等待一个事件的发生,这个事件只能由改组线程里面的另一线程发出,则我们称这组线程发生了死锁。
死锁发生的四个条件:
1.死锁发生的必要条件是条件有限。
2.持有等待,也就是所一个线程在请求新的资源的时候它原先获得的资源并不会释放。
3. 不能抢占。
4.循环等待条件。
死锁的应对:
1.容许发生死锁
1)假装没看见不理睬
2)在死锁发生后,想办法予以解决。
2.不容许发生死锁
1)通过生活中的周全考虑,避免难题。
2)通过将发生死锁的必要条件消除,杜绝死锁地发生。
关于死锁确实可以不予理会,因为有时候要杜绝死锁要花费的时间和精力过大,倒不如如果死锁发生就直接重启,但是还是有死锁发生后将他修复的方法,也就是先检查死锁,再去修复他,但是我们还可以通过死锁发生的必要条件去防范死锁的发送。
1.动态死锁的预防:优点是无需等待死锁的发生,而是在死锁发生前拒绝会让死锁发生的资源请求。
缺点就是计算过于繁琐。(有银行家算法)
2.死锁的静态防止:
1)消除资源独占条件
2)消除保持和请求条件
3)消除非抢占条件
4)消除循环等待条件