您的位置:首页 > 健康 > 养生 > app手表_中国互联网协会会员单位_百度学术论文查重入口_京津冀协同发展

app手表_中国互联网协会会员单位_百度学术论文查重入口_京津冀协同发展

2025/3/18 11:04:01 来源:https://blog.csdn.net/2402_84438596/article/details/146325223  浏览:    关键词:app手表_中国互联网协会会员单位_百度学术论文查重入口_京津冀协同发展
app手表_中国互联网协会会员单位_百度学术论文查重入口_京津冀协同发展

(1)什么是死锁

  • 死锁 是指在两个或多个进程的执行时,每个进程都持有资源 并 等待其他进程 释放 它所需的资源,如果此时所有的进程一直占有资源而不释放,就会陷入互相等待的一种僵局状态。

  • 死锁只有同时满足 四个条件时才会发生:

    1. 互斥:也就是 这块资源 只能被一个进程获取

      img

    2. 请求并保持:进程因为请求资源而阻塞了,同时它也不会释放自己的资源

      img

    3. 不可剥夺:资源只能由持有者 自愿释放,不能强行剥夺

      img

    4. 循环等待:线程 A 已经持有资源 2,而想请求资源 1, 线程 B 已经获取了资源 1,而想请求资源 2,这就形成资源请求等待的环形图。

      img

  • 死锁的几种场景:

    • 忘记释放锁(自己不能再用了,其他线程也不能用)

    • 重复加同一个锁 (往往是在被锁定的代码区内调用函数,而那个函数内部也有同一个锁,这种错误就比较隐蔽了)

    • 多线程多锁,抢占锁资源(线程之间互相需要对方的锁,但是都给不了)

      image-20250317170614667

(2)如何避免死锁

通过 破坏死锁的四个必要条件之一 来预防死锁。

  • 破坏 互斥条件:使得多个进程可以同时访问 同一个资源。例如,在内存中缓存某些资源,从而避免频繁的磁盘读写。
  • 破坏 不可抢占条件:当一个进程所持有的资源被其它进程请求时,可以强制该进程放弃资源
  • 破坏 请求与保持条件:进程在申请新资源之前先释放它所拥有的所有资源,等待新资源的分配,再重新申请先前持有的资源。
  • 破坏循环等待条件:通过给资源编号,规定每个进程按编号的顺序请求资源,释放资源的顺序与请求的顺序相反,从而避免循环等待。
  • 另外:
    • 设置超时时间:如果一个进程不能在一定时间内获得所需的所有资源,就应该释放已经获取的资源,以免造成系统资源的浪费。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com