死锁
同时满足以下4个条件便发生死锁:
1. 互斥:至少存在一个资源非共享,那么申请进程必须等到该资源被释放才能结束。
2. 占有并等待:一个进程必须占有至少一个资源,并等待另一个被其他进程占有的资源。
3. 非抢占:资源被占有后不能被其他进程抢占,只能等到该进程结束后释放。
4. 循环等待:有一组进程{p0,p1...pn-1},pi%n等待的资源被p(i+1)%n占有。
死锁预防,只要以上4个条件有一个不满足就不会死锁:
1. 互斥:这个条件没解决办法。
2. 占有并等待,两种解决办法:
a. 进程在执行前先申请并获得所有资源。
b. 进程在申请新的资源时必须释放占有的资源。
这两种方法的缺点:资源利用率低且可能发生饥饿。
3. 非抢占,解决办法:进程申请一个不能被立即释放的资源,那么该进程所占有的资源都可能被抢占,如果申请到资源则还必须恢复等待时被抢占的资源才能继续执行。
4. 循环等待,解决办法:将资源编号,然后一个进程按照编号依次申请资源。
死锁避免:
1. 有序分配资源
2. 资源分配图算法检测
3. 银行家算法检测