什么是死锁?怎么打破死锁?

什么是死锁?

百度百科上是这么说的:

死锁是指两个或两个以上的进程(线程)在执行过程中,由于竞争资 源或者由于彼此通信而
造成的一种阻塞的现象,若无外力作用,它们都将无法推 进下去。此时称系统处于死锁状态或系统产生 了死锁,这些永远在互相等待的进 程(线程)称为死锁进程(线程)。

举一个例子:

我们有两个资源s1,以及s2

两个线程t1,以及t2

假设t1先抢到了资源s1,并且需要s2,但是t2此时以及把s2资源给拿到了,在等待s1

这个时候t1和t2线程就会相互等待对方释放资源,从而导致了死锁的现象

好,那怎么打破死锁呢?

首先我们得聊一下操作系统对于死锁形成的四个条件的描述:

1.互斥条件:线程拿到资源后,便具有了排他性,这个资源只能被该线程使用,直到它释放这个资源

2.占有并等待:线程至少持有了一个资源,并且正在等待着另外一个资源

3.不剥夺:当线程持有了一个资源后,不能被强行剥夺(也就是不能偷它,哈哈哈)。

4.循环等待:当发生死锁时,参与的线程肯定会形成一个环,都想抢其他的资源,但是又抢不着,死循环。

 

打破方式:

1.破坏互斥条件:破坏不了,临界资源本来就用于互斥,所以就不从这儿下手了

2.破坏占有并等待条件:一次性申请完所有的资源,这样就不会说导致占有了一个或多个,等待着另一个的情况了

3.破坏不剥夺条件:让持有一部分资源的线程,再申请不到资源的时候主动放弃自己已经获得了的资源

4.破坏循环等待条件:获取临界资源的时候,按照统一的顺序来,比如上述例子,让两个线程都先争夺资源s1,再争夺资源s2.

 

         理解如果有误,请大家在评论区中指出 !!!!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值