对于永久性资源,产生死锁有四个必要条件:
- 互斥条件。一个资源只能被一个进程占用
- 不可剥夺条件。某个进程占用了资源,就只能他自己去释放。
- 请求和保持条件。某个进程之前申请了资源,我还想再申请资源,之前的资源还是我占用着,别人别想动。除非我自己不想用了,释放掉。
- 循环等待条件。一定会有一个环互相等待。
什么是必要条件
必要条件是数学中的一种关系形式。如果没有A,则必然没有B;如果有A而未必有B,则A就是B的必要条件,记作B→A,读作“B含于A”。数学上简单来说就是如果由结果B能推导出条件A,我们就说A是B的必要条件。
可能我一直犯了一个错误,把必要条件理解成了数学中的必要条件,其实这里更像是逻辑学的一些关系形式。这里或多或少还是有一定区别的。
数学
有命题p、q,如果p推出q,则p是q的充分条件,q是p的必要条件;如果p推出q且q推出p,则p是q的充分必要条件,简称充要条件。
逻辑学
- 必要条件
定义:如果没有事物情况A,则必然没有事物情况B;如果有事物情况B就一定有事物情况A,A就是B的必要条件,应注意必要条件不是必要不充分条件的简称。 - 充分条件
定义:如果有事物情况A,则必然有事物情况B;如果没有事物情况A而未必没有事物情况B,A就是B的充分而不必要条件,简称充分条件。紧跟在“如果”之后 。
必要条件是逻辑学在研究假言命题及假言推理时引出的。
我们按照逻辑学的定义来简述 :
产生死锁的4个必要条件是1.互斥2.不可剥夺3.请求和保持4.循环等待。
逻辑学的定义
如果没有事物情况A,则必然没有事物情况B;如果有事物情况B就一定有事物情况A,A就是B的必要条件,应注意必要条件不是必要不充分条件的简称。
如果没有这个4个条件(1.互斥2.不可剥夺3.请求和保持4.循环等待),则必然不会产生死锁;
如果产生死锁,这一定有这个4个条件(1.互斥2.不可剥夺3.请求和保持4.循环等待)并且这4个条件都是要满足的。并不是满足其中一个。
4个条件是死锁产生的必要条件。不是充分条件,充分条件的意思是如果有这个4个条件,就一定会死锁,显示不是,要产生死锁肯定还有其他条件满足才行。但是必要条件的意思是,只要产生死锁,就会有这4种情况出现,如果有一条情况不满足,那么肯定不会产生死锁。所以我们经常预防死锁就是通过解除这4个必要条件来实现。
北京大学出版社 陈向群 的 《操作系统教程》第三版 我怎么感觉这句话不严谨呢?
我觉得应该改成 只要系统发生死锁,则以上四个条件都必须成立。