首页 > 系统相关 >给定进程数、每个进程最大资源需求数以及总资源数,判断系统是否会发生死锁

给定进程数、每个进程最大资源需求数以及总资源数,判断系统是否会发生死锁

时间:2024-04-23 10:13:38浏览次数:24  
标签:每个 数为 死锁 进程 资源 请求

记总进程数为 n,总资源数为 m,每个进程所需的最大资源数为 w。

如果 n * (w-1) <= m 则不会发生死锁,否则会发生死锁.

案例一:

具体来看,假如 n = 2,m = 3,w = 2,根据上述式子,该系统不会发生死锁。

在某一时刻,两个进程同时发出资源请求,且每个进程请求的个数为 w - 1,也就是 1 个资源,此时所有进程的都还缺少一个资源才能结束进程并释放自己的资源,考察目前已经消耗的资源数以及系统剩余的资源数,分别为 2 和 1,这时将这个剩余的资源分配给上述两个进程的任意一个,假如分配给进程 P1,该进程获得了所需的资源,于是释放它被分配的资源,此时系统资源总数为 2,这时,将这两个资源的其中 1 个资源分配给另一个正在等待的进程 P2,该进程得以释放,同时所有的进程都得到满足。

案例二:

再来看一个例子,假如 n = 3,m = 3,w = 2,根据上述式子,该系统可能会发生死锁。

在某一时刻,三个进程同时发出资源请求,每个进程请求资源个数为 w - 1,即 1 个资源,此时消耗的总资源数为 n * 1 = 3 * 1 = 3 个资源,剩余资源数为 m - 3 = 3 - 3 = 0,在这一时刻,所有进程都在等待,并且这种等待行为不会结束,因为没有一个进程会提前结束并释放出自己的资源供其他进程使用,即进入了死锁状态。

课后练习:

 

标签:每个,数为,死锁,进程,资源,请求
From: https://www.cnblogs.com/gaotianchi/p/18152209/determine-whether-a-deadlock-will-occur-in-t

相关文章

  • Windows编程系列:设置资源管理器背景
    偶然的机会,在github上发现了一个有趣且优秀的项目,https://github.com/Maplespe/explorerTool。这里学习了一下,并顺带学习了一下涉及的相关知识点。不得不感叹作者的厉害之处,能想到这种方法。 主要实现原理是:1、通过ApiHook,在调用CreateWindows函数创建窗口时,如果是资源管理器......
  • Resource Hacker 修改程序图标资源
    使用ResourceHacker之类的工具改动程序文件中关于图标资源的文件(主程序exe或一个专门的资源dll),将你的个性化图标替换相应位置的默认图标。这种方法会改动程序文件,改动后程序有可能报错或无法启动。ResourceHacker修改图标后会自动给原图标做个备份命名为xxx_original所以不用......
  • 水资源管理系统:守护生命之源,构建和谐水生态
    水资源是维系地球生态平衡和人类社会可持续发展的重要基础。然而,随着人口增长、工业化和城市化的加速,水资源短缺、水质污染和生态破坏等问题日益凸显。在这样的背景下,构建一个全面、高效、智能的水资源管理系统显得尤为迫切和必要。项目背景水资源的合理利用和有效保护是全球面......
  • 矿产资源管理系统:开启智慧矿业新篇章
    项目背景在全球经济发展的大背景下,矿产资源作为工业的“粮食”和“血液”,其合理开发与有效管理对于国家的经济发展、能源安全和工业稳定供应具有不可替代的作用。然而,随着资源的日益紧张和环境保护要求的提高,传统的矿产资源管理模式已难以满足现代社会的需求。因此,构建......
  • 不合理的执行顺序引发的死锁
    问题现象程序上线后运行反馈总会提示死锁,日志大量出现java.sql.BatchUpdateException:批处理中出现错误:ORA-00060:等待资源时检测到死锁根据具体的异常堆栈信息找到对应的代码行,发现某个Service层有类似如下代码片段:【方法上有切面事务】publicvoidbatchUpdate(Lis......
  • fiber使用websocket--多进程版本
    多进程数据是隔离的,也就是说处理不好,不同的用户登录,其实不在一个进程,没办法直接通信解决办法:定义一个全局变量,所有进程公用,要加锁如果是单进程版本其实就跟gin框架那些一样了多线程+channel不存在数据隔离的问题main.gopackagemainimport( "flag" "fmt" "log" "sync"......
  • python监控MongoDB服务进程,故障钉钉告警
     服务器1xx.168.8x.77#!/usr/bin/python#!_*_coding:utf-8_*_importosimportsysimporttimemongo_ip='192.168.xx.77'ports=['x001','x002']defport(ip,port):  response=os.popen("tcping %s%s|grepopen|awk-F'&......
  • Android进程创建流程-2
    一、java线程创建流程1.部分调用逻辑Runtime::AttachCurrentThread(constchar*thread_name,boolas_daemon,jobjectthread_group,boolcreate_peer)Runtime::Init(RuntimeArgumentMap&&runtime_options_in)//runtime.cc备注说"ClassLinkerneedsan......
  • 如何 kill 掉所有跟 wandb 相关的进程
    听说一些残留wandb进程会占用显存,因此有在模型训练结束后,把wandb进程全部杀掉的需求。最近反复遇到该场景,因此存档记录一下。(以下为kimi.ai的回答)在Linux系统中,如果你想要杀掉所有与wandb(Weights&Biases,一个机器学习实验跟踪工具)相关的进程,可以使用pkill或kill......
  • 在macOS上管理MongoDB:服务和手动后台进程
    MongoDB是一个功能强大的开源NoSQL数据库,因其可扩展性和性能而受到青睐。macOS用户可以将MongoDB配置为服务运行,或者手动将其作为后台进程运行。本文将详细介绍如何在macOS上使用MongoDB7.0版本进行这两种操作。将MongoDB作为macOS服务运行为了便捷性和确保MongoDB持续运行,macO......