6.6.1 破坏互斥条件
如果资源不被一个进程独占,死锁就不会产生。
比如打印机,通过采用假脱机打印机技术可以允许若干个进程同时产生输出。这个模型中唯一正值请求使用物理打印机的进程是打印机的守护进程,由于守护进程绝不会请求别的资源,所以不会因打印机而产生死锁。
从思路的角度说尽量让能请求资源的进程尽可能的少。
6.6.2 破坏占有和等待条件
只要禁止已持有资源的进程再等待其他资源,可以消除死锁:
一种实现方法是规定所有进程再开始执行前请求所有的资源。如果所有资源都可用,那么就不分配这个进程,于是该进程肯定可以运行。
这样做有两个问题,一个是很多进程没办法知道它需要多少资源,二是即使知道这样的方式效率也很低。
还有一种方法是当一个进程请求资源时,先暂时释放其当前占用的所有资源,然后在尝试一次获得所需的全部资源。
6.6.3 破坏不可抢占条件
可以对资源进行虚拟化,比如打印机可以考虑将其映射到磁盘上,这样就可以抢占了,但是并不是所有资源都可以虚拟化,比如数据中的锁。因此存在出现死锁的可能。
6.6.4 破坏环路等待条件
一种方法每一个进程在任何时候都只能占用一个资源,如果需要占用另一个资源必须放弃前一个资源。缺点很明显不是所有进程都满足条件的
另一种是将所有资源统一编号,所有的进程必须按顺序提出资源请求。这种方法的一个缺点是不同资源没有明确的顺序概念,难以编号。
第二种方法有一种变种,仅仅要求不允许进程请求比当前所占有的资源编号低的资源。缺点同2。