死锁的原因及解决避免的办法
死锁原理:
多线程以及多进程改善了系统资源利用率,但是并发执行也带来了死锁的问题。
死锁是指一组进程因竞争资源而造成的一种互相等待的僵局,每个进程都占有不会释放的资源并请求其他进程的不会释放的资源而处于一种永久等待的状态
死锁产生的条件:
a、互斥条件(Mutual exclusion): 资源不能被共享,只能由一个进程使用。
b、请求与保持条件(Hold and wait): 已经得到资源的进程可以再次申请新的资源,并对已经获得的资源保持不放。
c、非剥夺条件(No pre-emption): 系统不能强制收回进程中已经分配的资源,只能由进程使用完自己释放。
d、循环等待条件(Circular wait): 若干进程形成的进程环,都占用对方申请的下一个资源。
避免死锁:
- 加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)
- 死锁检测 1.如果一个进程的当前请求的资源会导致死锁,系统拒绝启动该进程;
2.如果一个资源的分配会导致下一步的死锁,系统就拒绝本次的分配;