多线程死锁 危害 解决方案

本文详细探讨了死锁的概念,阐述了其产生的四个必要条件,通过刀叉例子说明。并介绍了避免死锁的方法,以及死锁带来的危害,包括影响进程结果和资源利用率。

1 什么是死锁?

两个或以上线程或进程在执行过程中,因争夺资源而造成互相等待的现象,若无外力作用

,它们将无法推进下去。

产生死的条件(同时满足)循不互请

互斥:共享资源a和b只能被一个线程占用(无法破坏)

请求和保持:线程T1已经获得共享资源a,在等待共享资源B的时候,不释放共享资源a(在首次执行时一次性申请所有的资源)

不可她占:其他线程不可强行抢占T1占有的资源(主动释放线程占有的资源)

循环等待:线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源,这造成循环等待(按顺序申请资源来预防死锁的产生)

如A B 两个线程争夺刀叉。

A 拿到刀,然后去争夺叉。  B拿到叉去争夺刀。

这个时候A争夺的叉被B拿到已经锁住了,而B争夺的的刀也被A拿到锁住了。就一直等待,造成死锁。

解决方案:刀和叉要有顺序。当去争夺叉的时候,必须先拿到刀。

这样就可以避免死锁了。

死锁危害

1死锁会使进程得不到正确的结果

2 死锁会使资源利用率降低。相互等待的线程不可用(如本来有5个线程工作,现在2个线程卡住了,只有3个线程能工作了)

3 死锁还会导致产生新的死锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿甘带你学java

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值