news 2026/9/16 20:28:43

Bilibili 三面: 资源分配图中存在环路则一定出现死锁么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Bilibili 三面: 资源分配图中存在环路则一定出现死锁么?

👉这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:

  • 《项目实战(视频)》:从书中学,往事上“练”

  • 《互联网高频面试题》:面朝简历学习,春暖花开

  • 《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题

  • 《精进 Java 学习指南》:系统学习,互联网主流技术栈

  • 《必读 Java 源码专栏》:知其然,知其所以然

👉这是一个或许对你有用的开源项目

国产Star破10w的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构

RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRMAI大模型、IoT物联网等功能:

  • 多模块:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • 微服务:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK17/21+SpringBoot3、JDK8/11+Spring Boot2双版本

来源:飞天小牛肉

  • 前言

  • 死锁检测模型

  • 每种资源类型一个实例

  • 每种资源类型多个实例

  • 总结


前言

死锁避免算法大部分小伙伴应该都能说出来 “银行家算法”,死锁检测算法确实不常问也不常见,最近在一篇 Bilibili 的三面面经中看见了死锁检测算法,遂写出此文。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

死锁检测模型

在并发系统中,多个进程可能会因为资源竞争而陷入死锁。死锁检测模型提供了一种机制,通过将系统状态抽象为资源分配图,来识别死锁的存在。在这个图中,每个进程和资源都被表示为节点,资源和进程之间的有向边表示资源的分配和请求。

可证明结论:

  • 无环安全状态:如果资源分配图是一个无环图,系统处于安全状态,因为存在一种资源分配序列可以使得所有进程顺利完成。

  • 环存在不确定性:如果图中存在环,系统处于不安全状态,但不一定处于死锁状态

    • 当每种资源类型只有一个实例时,死锁一定发生

    • 如果资源类型有多个实例,系统也可能通过资源的动态分配来避免死锁

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

每种资源类型一个实例

上图为资源分配图,其中方框表示资源,圆圈表示进程。资源指向进程表示该资源已经分配给该进程,进程指向资源表示进程请求获取该资源。

图 a 可以抽取出环,如图 b,它满足了环路等待条件,因此一定会发生死锁。

每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。具体算法描述如下:

  1. 初始化:创建一个资源分配图,用有向边表示资源和进程之间的关系。

  2. 深度优先搜索(DFS):从任意一个进程开始,进行深度优先搜索。

  3. 标记访问:在搜索过程中,对访问过的节点(进程)进行标记。

  4. 检测环:如果在搜索中遇到了已经被标记的节点,说明存在环,即检测到死锁。

详细算法步骤:

  1. 选择一个未访问的进程作为起点。

  2. 进行DFS,访问其相邻的资源节点。

  3. 标记该进程为已访问。

  4. 如果从该进程出发可以回到任何已标记的进程,则存在死锁。

  5. 如果所有进程都被访问且没有形成环,则没有死锁。

每种资源类型多个实例

上图中,有三个进程四个资源,每个数据代表的含义如下:

  • E 向量:资源总量

  • A 向量:资源剩余量

  • C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量(P1、P2、P3 三个进程)

  • R 矩阵:每个进程请求的资源数量

进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,因此我们让 P3 先执行,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。这样的话 P2 就可以执行了,执行后释放 P2 拥有的资源,A = (4 2 2 1) 。P1 也可以执行了。所有的进程都可以顺利执行,所以没有死锁。具体算法描述如下:

  1. 初始化:定义E(资源总量)、A(资源剩余量)、C(进程拥有的资源矩阵)和R(进程请求的资源矩阵)。

  2. 寻找可执行进程:选择一个请求资源不超过A的进程执行。

  3. 资源分配:将该进程请求的资源分配给它,并更新A和C。

  4. 进程完成:当进程执行完毕后,将其拥有的资源释放回A,并更新C。如果所有线程都可以顺利执行完毕,则没有死锁

详细算法步骤:

  1. 标记所有进程为未标记。

  2. 从所有未标记的进程中选择一个,其请求的资源向量Ri小于等于A。

  3. 将该进程的资源需求从A中减去,并更新C矩阵,标记该进程为已执行。

  4. 如果没有这样的进程,检查是否有任何进程可以执行。如果没有,则检测到死锁

  5. 重复步骤2和3,直到所有进程都被标记为已执行或检测到死锁

总结

总结下:

  • 对于每种资源类型一个实例的场景,若有环则必死锁;其死锁检测算法基于图论中的环检测技术,将死锁检测问题转化为有向图中的环判断问题

  • 对于没中资源类型多个实例的场景,有环不一定死锁;其死锁检测算法通过模拟资源分配和回收过程,检测是否存在一系列进程可以顺利获取资源完成执行,从而判断系统是否处于死锁状态


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。 谢谢支持哟 (*^__^*)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 8:27:29

Si83402BAA-IF,具有低导通电阻的2通道隔离智能开关

型号介绍今天我要向大家介绍的是 skyworks 的智能隔离开关——Si83402BAA-IF。该器件具有低导通电阻 (RON),能够在提供高连续电流的同时,对感性负载进行无限量的消磁。采用紧凑的 DFN 封装,并集成了安全等级的隔离功能。其逻辑接口为两个低功…

作者头像 李华
网站建设 2026/9/7 5:23:48

基于springboot的电动车租赁平台系统-计算机毕业设计源码+LW无文档

基于SpringBoot的电动车租赁平台系统 摘要:本文详细阐述了基于SpringBoot的电动车租赁平台系统的研究背景意义、需求分析以及功能设计。随着共享经济的兴起和人们出行需求的多样化,电动车租赁市场具有广阔的发展前景。本系统旨在解决传统电动车租赁模式中…

作者头像 李华
网站建设 2026/9/3 1:16:19

RAGFlow工程师必看:微服务架构设计与企业级部署实践

文章详细介绍了RAGFlow开源RAG引擎的技术特点与架构设计,重点解析了其微服务架构、DeepDoc文档解析能力和Agent工作流机制。涵盖了生产环境资源规划、Docker容器化部署、异步任务流转、Elasticsearch索引优化等工程实践,为开发者构建企业级RAG系统提供了…

作者头像 李华
网站建设 2026/8/29 6:26:34

大模型训练全流程解析:从“书呆子“到“智能体“的蜕变之路

文章通过"培养天才学生"的比喻,将大模型训练分为四个阶段:预训练(构建基础知识)、后训练与对齐(培养情商和价值观)、推理增强(发展深度逻辑能力)、智能体与工具(学习使用外部资源)。每个阶段都有其特定的技术和目标,最终使大模型从…

作者头像 李华
网站建设 2026/9/8 9:29:20

Thinkphp和Laravel框架的校园点歌系统的设计与实现

目录摘要技术选型对比开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 校园点歌系统是一种基于Web的应用程序,旨在为学生和教职工提供便捷的点歌服务,丰富校园文化生活。系统采用ThinkPHP或Laravel框…

作者头像 李华