死锁的产生
原因
- 因为系统资源不足。
- 进程运行推进的顺序不合适。
- 资源分配不当等。
四个必要条件
- 互斥条件:一个资源每次只能被一个进程使用。
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
避免死锁
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。
死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。
避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。
常用的避免死锁的方法
- 有序资源分配法
- 银行家算法
解决死锁问题的策略
- 条件一:互斥条件
条件一念一否定的,因为资源的互斥性是由其自身的性质决定的。但是可以采用虚拟设备技术能排除非共享设备死锁的可能。 - 条件二:不剥夺条件
很难实现。系统一般让资源占有者自己主动释放资源,而不是采用抢占的方式。 - 条件三:占有并等待
在资源分配策略上可以采取静态的一次性资源分配的方法来保证死锁不可能发生,这是一种很保守的静态预防死锁的方法,但是资源利用率低下。 - 条件四:环路条件
在进行资源分配前检查是否会出现环路,预测是否可能发生死锁,只要有这种可能就不予以分配。即采用动态分配资源的方法。
总结来看解决死锁的策略有以下几个:
1、采用资源静态分配方法预防死锁。
2、采用资源动态分配、有效的控制分配方法来避免死锁。
3、当死锁发生时检测出死锁,并设法修复。