死锁
死锁:死锁是指多个资源之间互相等待对方的资源,而在得到对方的资源之前又不释放自己的资源,这样,造成循环等待的一种现象,如果所有进程都在互相等待一个不可能发生的事件,则进程就死锁了。
死锁产生的必要条件:
- 互斥条件:进程对资源进行排他性使用,即在一段时间内对某资源仅为一个进程所占用。
- 请求和保持条件:当进程因请求资源而阻塞时,对已获得得资源保持不放。
- 不可剥夺条件:进程已获得得资源子啊未使用之前,不能被剥夺,只能够在使用完时由自己释放。
- 环路等待条件:各个进程组成封闭的环形链,每个进程都在等待下一个进程所占用的资源。
防止死锁办法:
- 资源一次性分配(破坏请求和保持条件)
- 可剥夺资源(破坏不可剥夺条件)
- 资源有序分配法*(破坏循环等待条件)
死锁避免
- 预防死锁的几种策略,会严重损坏系统性能(比如一次性分配资源)。因此在避免死锁时,要施加较弱的限制,从而获得满意的性能。
- 由于在避免死锁的策略中,允许近场动态地申请资源。因而,系统在分配资源之前会预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程,否则,进程等待。其中最具有代表性的避免死锁的算法是银行家算法。
哲学家问题
问题描述
有五个哲学家,他们的生活方式是交替地进行思考和进餐。他们共用一张圆桌,分别坐在五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐完毕,放下筷子又继续思考。
解决方案
- 方法一:至多只允许四位哲学家同时去拿左筷子,最终能保证至少有一位哲学家能进餐,并在用完后释放两只筷子供他人使用。
- 方法二:仅当哲学家的左右手筷子都拿起时才允许进餐。
- 方法三:规定奇数号哲学家先拿左筷子再拿右筷子,而偶数号哲学家相反。
参考地址
https://blog.csdn.net/qq_28602957/article/details/53538329
银行家算法
- 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可以接纳该顾客。
- 客户可以分期贷款,但贷款总数不能超过最大需求量。
- 当银行家现有的资金不能满足顾客尚需的贷款总额时,对顾客的贷款可推迟支付,但总能是顾客在有限的时间里获得贷款。
- 当顾客得到所需要的全部资金后,一定能在有限的时间里归还所有的资金。
参考
https://www.cnblogs.com/chuxiuhong/p/6103928.html
https://blog.csdn.net/qq_42070071/article/details/80503179
https://blog.csdn.net/qq_28602957/article/details/53538329
网友评论