linux网络编程之进程间通信基础(二) 死锁、信号量与PV原语简介
一、死锁
(1) 死锁是指多个进程之间相互等待对方的资源,而在得到对方资源之前又不释放自己的资源,这样 ,造成循环等待的一种现象。如果所有进程都在等待一个不可能发生的事,则进程就死锁了。 (2)死锁产生的必要 条件: 互斥条件 进程对资源进行排它性使用,即在一段时间内某资源仅为一个进程所占用。 请求和保持条件 当进程因请求资源而阻塞时,对已获得的资源保持不放。 不可剥夺条件 进程已获得的资源在未使用完之前,不能被剥夺,只能在使用完时由自己释放。 环路等待条件 各个进程组成封闭的环形链,每个进程都等待下一个进程所占用的资源 (3)防止死锁的办法 资源一次性 分配:(破坏请求和保持条件) 可剥夺资源:(破坏不可剥夺条件) 资源有序分配法:(破坏循环等待条件) (4)死锁避免 预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从 而获得较满意的系统性能。 由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先 计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代 表性的避免死锁算法是银行家算法。 (5)银行家算法 为保证资金的安全,银行家规定: * 当一 个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客; * 顾客可以分期贷款,但贷款的总数不 能超过最大需求量 * 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在 有限的时间里得到贷款 * 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金. (6)哲学家 就餐问题 五个哲学家围在一个圆桌就餐,每个人都必须拿起两根筷子才能用餐,当每个人都先拿起左筷子,等待右 筷子的时候就会造成死锁。 哲学家就餐问题解法 服务生解法 最多4个哲学家 仅当一个哲学家两边筷子都可用时才允许他拿筷子 给所有哲学家编号,奇数号的哲 学家必须首先拿左边的筷子,偶数号的哲学家则反之
(编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |