线程死锁

来源:互联网 发布:网络借贷资金存管 编辑:程序博客网 时间:2024/06/14 09:24

线程死锁

    线程死锁是指两个或两个以上的进程在执行过程中,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,就称为死锁,若无外部处理,将无限等待下去。死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。例如:过窄桥。把桥喻作资源,把汽车喻为进程。窄桥无法两辆汽车并行。如果A、B两辆汽车在桥的两端相向行驶,当A、B在桥上相遇时(也就是A、B都拥有了桥的一部分资源),想要过桥,就必须要有一方让路,但谁也不让路,就造成了无休止地等待下去,这种现象就是死锁。

产生死锁的原因:

1、系统资源不足(系统资源的数目不足以满足全部进程的需要时,就会资源的竞争而发生死锁现象)2、进程(线程)推进的顺序不恰当。(进程运行推进顺序与速度不同,也可能产生死锁)3、竞争资源发生死锁现象

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

1、互斥条件:一个资源每次只能被一个进程使用。2、占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3、不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。只要系统发生死锁,以上这些条件必然成立。而只要上述条件之一不满足,就不会发生死锁。

死锁处理的基本方法:

    1、预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件(采用资源预分配策略,打破占有且申请条件等等)    2、避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁(有序的资源分配,银行家算法)    3、检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉(检测当前正在请求的锁是否已经被其它线程持有,再检查自己持有的锁是否正被其中任何一个线程请求)    4、解除死锁:该方法与检测死锁配合使用(剥夺资源、撤销进程)

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

1 0
原创粉丝点击