不会发生死锁的最少资源

不会发生死锁的最少资源

某系统中有5个并发进程,且每进程都需要2个同类资源,则该系统在一定不会发生死锁的前提下需要的最少资源是()
A. 6
B. 5
C. 10
D. 9

答案:(2-1)+(2-1)+(2-1)+(2-1)+(2-1)+1=6
如果每个进程都占用1个资源,就会发生死锁。如果再有1个多余资源,不管给任何一个进程,该进程就可以执行;执行完之后释放出5个资源,于是其它进程也可以执行,就不会发生死锁。

更严谨的通用公式推导:设进程数为 n,每个进程需要 r 个同类资源,则不会发生死锁的最少资源数为n(r-1)+1。

数学原理:每个进程最多持有 r-1 个资源时,仍可能因互相等待而陷入死锁(每个进程都差 1 个资源才能运行)。因此,只要资源总数达到「每个进程都持有 r-1 个资源」的总和再加 1,即 n(r-1)+1,就必然存在至少一个进程能获得第 r 个资源并运行;该进程运行完释放资源后,其余进程也能依次执行,从而不会发生死锁。

代入当前例子验证:n=5,r=2,则 n(r-1)+1 = 5×(2-1)+1 = 5×1+1 = 6,与题目答案一致。

反过来:

不会发生死锁的最多进程

若系统中有6个同类资源,有多个进程均需要使用2个,规定每个进程一次仅允许申请1个,则至多允许几个进程参于竞争,而不会发生死锁?
A. 5
B. 2
C. 3
D. 4

答案当然是5。

银行家算法与本题的关系

上面的公式 n(r-1)+1 是从「资源总量」角度直接判断死锁是否可能发生,而银行家算法则是操作系统在运行期动态判断「当前分配方案是否安全」的经典方法。两者本质相通:银行家算法通过模拟资源分配,检查是否存在一条能让所有进程依次执行完的安全序列;若存在,则系统处于安全状态,不会发生死锁。

下面用 Python 演示银行家算法,输入为 5 个进程各需 2 个资源、系统总资源 6 的场景,输出安全序列:

defis_safe(processes,available,max_need,allocated):""" 银行家算法:判断系统是否处于安全状态,并返回安全序列。 :param processes: 进程编号列表,如 [0, 1, 2, 3, 4] :param available: 当前可用资源数,如 [6](本题只有一类资源) :param max_need: 每个进程总共需要的资源数,如 [2, 2, 2, 2, 2] :param allocated: 每个进程已分配的资源数,如 [0, 0, 0, 0, 0] :return: (是否安全, 安全序列) """n=len(processes)# 计算每个进程还需要的资源数:need = max_need - allocatedneed=[max_need[i]-allocated[i]foriinrange(n)]# work 表示当前系统可用资源,初始为 availablework=available[:]# finish 记录每个进程是否已执行完毕finish=[False]*n safe_seq=[]# 存放安全序列# 最多尝试 n 轮:每轮找一个能完成的进程for_inrange(n):found=Falseforiinrange(n):# 该进程未完成,且其剩余需求不超过当前可用资源ifnotfinish[i]andneed[i]<=work:# 模拟该进程运行:先占用资源,运行完释放全部资源work[0]+=allocated[i]finish[i]=Truesafe_seq.append(processes[i])found=Truebreak# 找到就进入下一轮ifnotfound:# 某一轮找不到可执行的进程,说明系统不安全returnFalse,[]returnTrue,safe_seq# 题目场景:5 个进程,每进程需 2 个同类资源,系统总资源 6processes=[0,1,2,3,4]available=[6]# 系统共有 6 个资源max_need=[2,2,2,2,2]# 每个进程最多需要 2 个资源allocated=[0,0,0,0,0]# 初始都未分配safe,seq=is_safe(processes,available,max_need,allocated)ifsafe:print("系统处于安全状态,安全序列为:",seq)else:print("系统处于不安全状态,可能发生死锁")

代码逻辑说明:

  1. need 数组:每个进程还需要的资源数 = 最大需求 − 已分配。本题初始都未分配,所以 need 全为 2。
  2. work 与 finish:work记录当前可用资源,finish标记进程是否已完成。
  3. 循环查找:每轮扫描所有未完成进程,若其剩余需求 ≤ 当前可用资源,就模拟它运行——运行后释放其已占用的全部资源,加入安全序列。
  4. 安全判定:若某轮找不到任何可执行的进程,说明系统不安全;若所有进程都能依次完成,则输出安全序列。

运行结果会输出系统处于安全状态,安全序列为: [0, 1, 2, 3, 4]。这与前面公式的结论一致:系统总资源 6 时,5 个进程各需 2 个资源,银行家算法确认存在安全序列,因此不会发生死锁。

相关新闻

Mysql个人总结

Mysql个人总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:11:55 阅读更多 →
RevokeMsgPatcher实战教程:给微信QQ TIM装防撤回补丁的4步流程

RevokeMsgPatcher实战教程:给微信QQ TIM装防撤回补丁的4步流程

RevokeMsgPatcher实战教程&#xff1a;给微信QQ TIM装防撤回补丁的4步流程 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gi…

2026/10/21 1:11:55 阅读更多 →
gamdl 接入 Wrapper 完整指南:突破 Apple Music API 限制下载 ALAC 无损音乐

gamdl 接入 Wrapper 完整指南:突破 Apple Music API 限制下载 ALAC 无损音乐

gamdl 接入 Wrapper 完整指南:突破 Apple Music API 限制下载 ALAC 无损音乐 【免费下载链接】gamdl A command-line app for downloading Apple Music songs, music videos and post videos. 项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl gamdl 是一个用来…

2026/10/21 1:11:55 阅读更多 →

最新新闻

douyin-downloader 教程:从扫码登录到抖音主页作品批量去水印下载

douyin-downloader 教程:从扫码登录到抖音主页作品批量去水印下载

douyin-downloader 教程&#xff1a;从扫码登录到抖音主页作品批量去水印下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fal…

2026/10/21 1:43:29 阅读更多 →
KNECC608 中 SecureBoot 机制详解

KNECC608 中 SecureBoot 机制详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:43:29 阅读更多 →
Jasna 完整指南:从显卡检查到出片,免费实现 JAV 视频马赛克修复

Jasna 完整指南:从显卡检查到出片,免费实现 JAV 视频马赛克修复

Jasna 完整指南&#xff1a;从显卡检查到出片&#xff0c;免费实现 JAV 视频马赛克修复 【免费下载链接】jasna Video restoration tool 项目地址: https://gitcode.com/GitHub_Trending/ja/jasna 手上有带马赛克的视频想清理&#xff0c;但先要确认两件事&#xff1a;显…

2026/10/21 1:43:29 阅读更多 →
东芝双通道标准数字隔离器:低功耗工业隔离选型与设计指南

东芝双通道标准数字隔离器:低功耗工业隔离选型与设计指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:43:29 阅读更多 →
ESP-Mosaico模块化协作框架:解决嵌入式多模块开发痛点

ESP-Mosaico模块化协作框架:解决嵌入式多模块开发痛点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:43:29 阅读更多 →
点了「应用」却没生效?dsh-purge 提示词注入机制与规则集切换实用指南

点了「应用」却没生效?dsh-purge 提示词注入机制与规则集切换实用指南

点了「应用」却没生效?dsh-purge 提示词注入机制与规则集切换实用指南 【免费下载链接】dsh-purge DeepSeek Harness 破甲&#xff1a;让所有模型都能破甲&#xff0c;不同模型可换不同提示词&#xff1b;默认提示词面向国模「小码酱」。Jailbreak for every model — swap pr…

2026/10/21 1:42:28 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →