线程死锁

线程死锁

    线程死锁是指两个或两个以上的进程在执行过程中,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,就称为死锁,若无外部处理,将无限等待下去。

死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。

例如:过窄桥。把桥喻作资源,把汽车喻为进程。窄桥无法两辆汽车并行。如果A、B两辆汽车在桥的两端相向行驶,当A、B在桥上相遇时(也就是A、B都拥有了桥的一部分资源),想要过桥,就必须要有一方让路,但谁也不让路,就造成了无休止地等待下去,这种现象就是死锁。

产生死锁的原因:

1、系统资源不足(系统资源的数目不足以满足全部进程的需要时,就会资源的竞争而发生死锁现象)

2、进程(线程)推进的顺序不恰当。(进程运行推进顺序与速度不同,也可能产生死锁)

3、竞争资源发生死锁现象

产生死锁的四个必要条件:

1、互斥条件:一个资源每次只能被一个进程使用。

2、占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

3、不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。

4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。


只要系统发生死锁,以上这些条件必然成立。而只要上述条件之一不满足,就不会发生死锁。

死锁处理的基本方法:

    1、预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件(采用资源预分配策略,打破占有且申请条件等等)

    2、避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁(有序的资源分配,银行家算法)

    3、检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉(检测当前正在请求的锁是否已经被其它线程持有,再检查自己持有的锁是否正被其中任何一个线程请求)

    4、解除死锁:该方法与检测死锁配合使用(剥夺资源、撤销进程)

最简单的消除死锁的办法是重启系统。更好的办法是终止一个进程的运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值