死锁的产生原理及必要条件,如何避免死锁
2015-10-29 17:18
513 查看
产生死锁的原因主要是: (1) 因为系统资源不足。 (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则 就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
1、互斥使用(资源独占)
一个资源每次只能给一个进程使用
2、不可强占(不可剥夺)
资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
3、请求和保持(部分分配,占有申请)
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)
4、循环等待
存在一个进程等待队列
{P1 , P2 , … , Pn},
其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路
避免死锁:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和 解除死锁。所以,在系统设计、进程调度等方面注意如何具体的做法是破坏产生死锁的四个必要条件之一。
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。
避免死锁,该方法同样属于事先预防的策略,当它并不事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法去限制系统进入不安全状态,从而避免发生死锁。
检测死锁,预先可不采取任何限制措施,允许系统运行过程发生死锁。但可通过系统所设置的检测条件,检测并清除已发生死锁。
解除死锁:实现难度较大,与检测死锁相配套
如果需要对死锁的产生机制,必要条件,应对措施有更加深入的了解,可以参考计算机操作系统(汤小丹老师主编)
相关文章推荐
- Oracle外键不加索引引起死锁示例
- SQL2008中SQL应用之- 死锁(Deadlocking)
- C#中lock死锁实例教程
- 记一次公司仓库数据库服务器死锁过程及解决办法
- 利用sys.sysprocesses检查SqlServer的阻塞和死锁
- 深入浅出解析mssql在高频,高并发访问时键查找死锁问题
- PHP 解决session死锁的方法
- 查找MySQL线程中死锁的ID的方法
- MySQL Innodb表导致死锁日志情况分析与归纳
- Oracle删除死锁进程的方法
- Oracle对于死锁的处理方法
- 如何捕获和记录SQL Server中发生的死锁
- Python多线程编程(五):死锁的形成
- python避免死锁方法实例分析
- 线程池的理解
- Oracle死锁查询和处理
- oracle死锁
- pl/sql死锁情况:record is locked by another user
- Java多线程之死锁(哲学家进餐问题)
- kazoo在多进程下使用全局连接死锁问题