线程死锁
来源:互联网 发布:网络借贷资金存管 编辑:程序博客网 时间:2024/06/14 09:24
线程死锁
线程死锁是指两个或两个以上的进程在执行过程中,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,就称为死锁,若无外部处理,将无限等待下去。死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。例如:过窄桥。把桥喻作资源,把汽车喻为进程。窄桥无法两辆汽车并行。如果A、B两辆汽车在桥的两端相向行驶,当A、B在桥上相遇时(也就是A、B都拥有了桥的一部分资源),想要过桥,就必须要有一方让路,但谁也不让路,就造成了无休止地等待下去,这种现象就是死锁。
产生死锁的原因:
1、系统资源不足(系统资源的数目不足以满足全部进程的需要时,就会资源的竞争而发生死锁现象)2、进程(线程)推进的顺序不恰当。(进程运行推进顺序与速度不同,也可能产生死锁)3、竞争资源发生死锁现象
产生死锁的四个必要条件:
1、互斥条件:一个资源每次只能被一个进程使用。2、占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3、不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。只要系统发生死锁,以上这些条件必然成立。而只要上述条件之一不满足,就不会发生死锁。
死锁处理的基本方法:
1、预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件(采用资源预分配策略,打破占有且申请条件等等) 2、避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁(有序的资源分配,银行家算法) 3、检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉(检测当前正在请求的锁是否已经被其它线程持有,再检查自己持有的锁是否正被其中任何一个线程请求) 4、解除死锁:该方法与检测死锁配合使用(剥夺资源、撤销进程)
最简单的消除死锁的办法是重启系统。更好的办法是终止一个进程的运行。
1 0
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程-死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- ASP.NET实现微信功能(1)(创建菜单,验证,给菜单添加事件)
- 自定义网页头部前面小图标
- Android进阶之路
- git概念 原理 使用
- 4Sum II
- 线程死锁
- vue-resource post数据时碰到Django csrf
- Oracle plsql 查询时中文乱码
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- leetCode刷题归纳-Divide and Conquer(241. Different Ways to Add Parentheses)
- JVM学习之类加载
- 欢迎使用CSDN-markdown编辑器
- 525. Contiguous Array Medium
- MyBatis 配置中那些值得注意的坑