黑马程序员技术交流社区

标题: 产生死锁的原因 [打印本页]

作者: 李大伟    时间: 2013-5-7 18:52
标题: 产生死锁的原因
本帖最后由 李大伟 于 2013-5-8 19:09 编辑

产生死锁的原因? 求详解
作者: 白磊    时间: 2013-5-7 19:02
产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。
作者: 郑齐育    时间: 2013-5-7 20:35
举个经典的哲学家就餐的例子来说楼上的解释 5个哲学家在围坐一张圆桌,做两件事,吃意大利面和思考,并且两件事不能同时做。想假设每两个哲学家之间有一把叉子,由于吃意大利面用一把叉子很难办到,所以需要同时拿起左右两边的叉子才能吃意大利面,作为哲学家他们互不交流,不会把叉子给其他人,也不会从其他人那里抢叉子,也就是说他会等他旁边的人吃完他,他才会拿到第二把叉子。现在如果每个哲学家手里只有一把叉子,他们就只能互相等待,思索也就产生了。
互斥条件:一个叉子只能被哲学家使用
请求与保持:哲学家拿着一只叉子的时候会等待另一只叉子。
不剥夺条件:哲学家很有礼貌,不会抢其他人的叉子。
循环等待:每个哲学家手里拿着叉子会等待另一把叉子。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2