线程中的死锁

什么是死锁?是一组互相竞争资源的线程,因互相等待导致"永久"阻塞的现象。发生死锁的原因有四个:1.互斥条件,共享资源x和y只能被一个线程占用。2.占有且等待,线程t1已经取得共享资源x,在等待共享资源y的时候不释放共享资源x。3.不可抢占,其他线程不能强行抢占线程t1占有的资源。4.循环等待,线程t1等待线程t2占有的资源,线程t2等待线程t1占有的资源。那如何避免死锁呢,既然发生死锁的原因是需要同时满足这四个条件,我们只需要打破其中任意一个条件即可避免死锁问题 ,而在这四个条件中,第一个互斥条件是无法被破坏的,因为锁本身就是通过互斥来解决线程安全问题的,所以对于剩下三个,我们可以逐一进行分析,那么对于“占有且等待”这个条件时,我们可以一次性申请所有的资源,这样就不存在等待了,第二个就是对于“不可抢占”这个条件,占有部分资源的线程进一步申请其他资源时,可以主动释放它占有的资源,这样不可抢占的这个条件就被破坏了。第三个点,对于“循环等待”这个条件,可以按照顺序申请 资源来进行预防,所谓按序申请,是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的这样线性化以后自然就不存在循环等待了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吻暖@

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值