基础面试题——什么是死锁? 如何解决?

什么是死锁?
死锁是多个线程在执行过程中,因为争夺资源而造成的一种相互等待的状态。
如果没有外力干涉,它们将永远等待下去,程序无法继续执行。

死锁要满足的四个必要条件:

互斥使用: 一个资源每次只能被一个线程占用。
不可抢占: 线程已获得的资源在没有使用完毕之前,不能强行剥夺,资源只能由资源占有者主动释放。
占有且等待: 一个线程因请求资源而阻塞时,对已获得的资源保持不释放。
循环等待: 线程之间形成一种头尾相接的,循环等待资源的关系。

如何解决死锁?
想要预防和解除死锁,需要避免死锁4个条件同时发生。
例如:

  1. 破坏循环等待条件,让所有线程在请求资源时按顺序申请资源,避免形成循环等待。
  2. 一次性分配资源,确保一个线程在启动时就申请到所需的所有资源,避免在运行过程中因资源不够而发生死锁。
  3. 在请求资源时设置超时,超时后线程可以放弃请求,避免永久等待。
  4. 或者在请求资源时,不占有任何其他资源,避免线程在等待时占用其他资源,破坏死锁占有且等待条件。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值