码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 死锁和死锁的处理


    文章目录

    • 什么是死锁
        • 死锁、饥饿、死循环的区别
        • 什么时候会发生死锁
        • 死锁的四大必要条件
    • 死锁的处理
      • 预防死锁
        • 破坏互斥条件
        • 破坏不可剥夺条件
        • 破坏请求和保持条件
        • 破坏循环等待条件
      • 避免死锁
        • 银行家算法
      • 死锁的检测和解除

    什么是死锁

    在这里插入图片描述

    • 死锁问题 就是各自的进程互相等待对方手上的资源,导致各个进程都阻塞,无法前进的情况

    死锁、饥饿、死循环的区别

    image-20221029230546775

    • 死锁的进程一定是处于阻塞态的

    什么时候会发生死锁

    在这里插入图片描述

    • 对临界区资源的竞争

    死锁的四大必要条件

    在这里插入图片描述

    • 互斥条件
    • 不可剥夺
    • 请求和保持
    • 循环等待

    死锁的处理

    预防死锁

    • 预防死锁的核心就是破坏四大必要条件的一个或者几个条件

    破坏互斥条件

    在这里插入图片描述

    • 破坏互斥条件 不是所有情况都能破坏互斥条件 因为有些地方为了安全必须保证互斥条件

    破坏不可剥夺条件

    在这里插入图片描述

    • 两种方案

      • 就是当一个进程请求新的资源不满足,就释放保持的所有资源
      • 当进程需要的资源被其他进程所占的时候,由操作系统协助,直接将想要的资源剥夺
    • 缺点

      • 释放已经获得的资源可能造成前一阶段的工作失效,所以适合用于易保存和恢复状态的资源(如CPU资源,我们有一种对应的剥夺式的调度方式)

      • 反复的申请和释放资源会造成大量的系统开销,降低性能

    破坏请求和保持条件

    在这里插入图片描述

    • 大概实现的思想就是 只有进程能够收集运行需要的所有的资源才能投入运行 一旦运行,这些资源就是他的,该进程就不会请求别的资源
    • 缺点
      • 因为破坏了请求这种思想,所以对于一个进程来说,这个资源只需要很短的时间,但是会一直保持到进程结束,资源的利用率很低,,而且也会可能造成某些进程饥饿

    破坏循环等待条件

    在这里插入图片描述

    • 这种还是比较能够实现的
    • 顺序资源分配法,也就是将我们的资源排序,原理是只有获得小编号的资源,才能有资格神奇更大编号的资源 按此规则 已持有大编号的资源的进程不能逆向的回来神奇小编号的资源,也就不会产生循环等待的现象
    • 缺点
      • 不方便新增新的设备
      • 进程实际使用的资源的顺序根编号的递增顺序不一致,会导致资源的浪费
      • 编程比较麻烦

    避免死锁

    • 用某种方法防止系统进入不安全的状态,从而导致死锁,可以用银行家算法避免

    安全序列、安全状态、不安全状态、死锁之间的联系

    在这里插入图片描述

    • 所谓的安全序列就是如果系统按照这种序列分配资源,则每个进程都能顺利完成,只要找出一个安全序列,系统就是安全的状态
    • 系统处于不安全状态,就可能会死锁 如果发生死锁,那么系统肯定是不安全的状态 如果是安全状态,肯定不会发生死锁

    银行家算法

    image-20221030001212495

    死锁的检测和解除

    在这里插入图片描述

    死锁的检测

    在这里插入图片描述

    • 如果能消除所有的边,就说明不会发生死锁,如果不行,就说明会发生死锁

    死锁的解除

    在这里插入图片描述

  • 相关阅读:
    使用ensp搭建路由拓扑,并使用isis协议实现网络互通实操
    ardupilot 中常用的框架类及结构
    Leetcode 23.旋转排序数组
    solidity部署和验证代理合约
    Qt编程-QTableView同时冻结行和列
    6.jQuery中的Ajax上传文件
    Hadoop运行模式(五)、编写Hadoop集群常用脚本、Hadoop集群启停脚本、常用端口号说明、集群时间同步、时间服务器配置、其他机器配置
    Windows右键没有新建Word、PPT与Excel的解决方法
    GBASE 8s 索引B+树
    2、开发环境安装
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/127594518
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号