DANCE WITH JAVA

开发出高质量的系统

常用链接

统计

积分与排名

好友之家

最新评论

死锁

引发死锁的条件:
必须满足以下四种条件
1,互斥条件,每个资源要么已经分配给一个进程,要么就是可用的。
2,占有等待条件,已经得到了某个资源的进程可以再请求新的资源
3,不可抢占条件,已经分配给一个进程的资源不能强制的被抢占,只能被占有他的进程显示的释放
4,环路等待条件,死锁发生时,系统中一定有两个或者两个以上的进程组成一环路,该环路中的每一个

进程都在等待下一个进程占有的资源。

处理死锁的策略:
1,忽略该问题,你忽略它,它也会忽略你
2,测试死锁并恢复,让死锁发生,检测,一旦检测到,恢复
3,仔细对资源进行分配,动态避免死锁
4,通过破坏四个死锁条件之一

方法一对应的时鸵鸟算法,就是出现这种死锁的可能性很低,比如操作系统的fork,可能5年出现一次,

而在这段过程中,因为硬件等其它原因肯定要重新启动机器,放弃fork损失太大,就可以忽略这种死锁

,象鸵鸟一样,把头埋进沙子,当什么都没发生。

方法二:检测并恢复
恢复方法有:
 抢占恢复
 回退恢复
 杀死进程恢复
银行家算法:
如果有4个人(A,B,C,D)去银行贷款,银行有金额10个单位,
A贷款最大为6 ,A已经贷款1
B贷款最大为5 ,B已经贷款1
C贷款最大为4 ,C已经贷款2
D贷款最大为7 ,D已经贷款4
这个时候只有C的请求能通过,因为现在还有可用贷款2,只有C才能完成,然后释放更多,来让其它完成
这个时候如果给其它任何一个单位的贷款,那么所有的人都不能达到需求,完成。
银行家问题时个经典的问题,但是很少能得到实际的利用,因为每个客户自己都不知道自己需要多少资

源,同时,也不知道有多少个客户。因为不停的有用户login ,logout

方法四:破坏条件
1,破坏互斥条件,不让独占出现,
例如不让一个用户独占打印机,如spooling技术,让多个用户同时进入spooling
问题:可能在spooling中产生死锁
2,破坏占有等待条件
检测这个进程需要的所有资源是不是可用,如果可用分配,不可用的话就等待
问题:进程要在开始知道自己需要多少资源,这样可以使用银行家算法完成。
但是资源利用不是最优。
3,破坏不可抢占,这个实现起来最困难
4,破坏闭环
把所有资源编号,按照顺序请求

饥饿:
与死锁很接近的时饥饿
如果一个打印机的使用,是通过某种算法避免死锁,但是每次都是最小文件先打印,这样就可能产生一

种情况,大的文件永远不能打印,饥饿而死。

posted on 2006-09-20 21:29 dreamstone 阅读(700) 评论(1)  编辑  收藏 所属分类: 基础

评论

# re: 死锁[未登录] 2008-06-08 13:27 liu

java多线呈死锁的解决办法   回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: