死锁检测组件

一、死锁

  • 线程 A 占用资源 1,线程 B 占用资源 2,线程 A 想占用资源 2线程 B 想占用资源 1线程 A 占用资源 1 的情况下去申请占用资源 2线程 B 占用资源 2 的情况下去申请占用资源 1,就会出现互相等待对方释放资源的情况,也就是死锁
    • CPU 占用率 100% → 出现死循环或死锁。

在这里插入图片描述

  • 死锁检测的算法底层逻辑:
    • 有向图是否成环的问题
      • 线程 A 申请占用线程 B 的资源:A → B。
      • 线程 B 申请占用线程 C 的资源:B → C。
      • 线程 C 申请占用线程 A 的资源:C → A。
    • 如何通过资源找到对应的线程关系表(mtx ←→ thid)
    • 如何知道线程想占用资源有向图
      在这里插入图片描述

二、核心代码

  • 加锁之前。
    void before_lock(pthread_t tid, pthread_mutex_t *mtx) {pthread_t otherid = search_rela_table(mtx);if (otherid != 0) {struct source_type from;from.id = tid;from.type = PROCESS;struct source_type to;to.id = otherid;to.type = PROCESS;add_edge(tid, otherid);}
    }
    
  • 加锁之后。
    void after_lock(pthread_t tid, pthread_mutex_t *mtx) {pthread_t otherid = search_rela_table(mtx);if (otherid != 0) {struct source_type from;from.id = tid;from.type = PROCESS;struct source_type to;to.id = otherid;to.type = PROCESS;if (verify_edge(from, to)) {remove_edge(from, to);}}add_rela_table(mtx, tid);
    }
    
  • 解锁之后。
    void after_unlock(pthread_t tid, pthread_mutex_t *mtx) {del_rela_table(mtx, tid);
    }
    

  • 在关系表中增加一个关系。
    int add_rela_table(pthread_mutex_t *mtx, pthread_t tid) {int i = 0;for (i = 0;i < MAX;i ++) {if ((rela_table[i].mtx == NULL) && (rela_table[i].thid 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产HMI芯片Model3C ——工业品质价格亲民

工业级芯片相较于消费级芯片&#xff0c;在性能上确实拥有显著的优势&#xff0c;尤其对于带彩屏显示或HMI的产品来说&#xff0c;这种优势表现得尤为突出。 首先&#xff0c;对于带彩屏显示或HMI人机交互的产品来说&#xff0c;高性能的芯片是保证流畅的用户体验和快速响应的…

阿里云对象存储OSS批量上传,单个上传,批量删除,单个删除!

请自行替换秘钥&#xff1a; #阿里云 OSS src/main/resources/application.properties #不同的服务器&#xff0c;地址不同 aliyun.oss.file.endpointhttps://oss-cn-hangzhou.aliyuncs.com aliyun.oss.file.accessKeyIdLTAI5t9wUqCoD42qPGRy8S aliyun.oss.file.accessKeySecre…

Spring中的适配器模式

在Spring MVC框架中&#xff0c;适配器模式主要体现在对不同类型的处理器&#xff08;即Controller&#xff09;的统一处理上。Spring MVC通过适配器模式来保证无论Controller的实现方式如何多样化&#xff0c;都能够被DispatcherServlet统一调用和管理。具体使用方式如下&…

如何AI绘画(动漫风格)

绘画描述&#xff1a;一只金毛犬 绘画结果&#xff1a; 如何AI绘画&#xff08;动漫风格&#xff09;&#xff1a; 关注一休哥助手微信公众号 点击小程序按钮打开一休哥助手小程序 切换到我&#xff0c;复制授权码 登录网站&#xff1a;https://www.fudai.fun/drawing&…

leetcode.45题:跳跃游戏II

Leetcode.45题&#xff1a;跳跃游戏II /* 题意的理解&#xff1a; nums[0] 只能跳 1 ~ nums[0]步 依次类推&#xff1a;从nums[0] - nums[n - 1] 最少需要多少步数 nums 2 3 1 1 4 nums[0] 2,初始只能跳 1/2步&#xff0c;如跳1步&#xff0c;达到nums[1] 而nums[1] 3,顾第二…

C++构造析构函数

说起默认成员函数&#xff0c;每一个C程序员都不会陌生&#xff0c;因为默认成员函数就如同是一栋大厦的地基。我们常说“基础不牢&#xff0c;地动山摇”&#xff0c;在这里得到充分的体现。本章介绍两种默认成员函数&#xff1a;构造函数和析构函数。 正文开始~~~ 构造函数 …

解决 Linux环境下 conda环境无法激活

文章目录 Linux环境下 conda环境无法激活 Linux环境下 conda环境无法激活 检查’.bashrc’ 文件 vim ~./.bashrc add export PATH"/home/[usr_name]/[miniconda3 or anacodna]/bin:$PATH" # commented out by conda initialize conda init 重启shell 重新尝试con…

网络篇01 | 入门篇

网络篇01 | 入门篇 01 各层协议目录[网络篇02 | 应用层 kcp&#xff08;王者荣耀&#xff09;](https://blog.csdn.net/qiushily2030/article/details/135835946)[网络篇03 | 应用层 quic](https://blog.csdn.net/qiushily2030/article/details/136192481)[网络篇04 | 应用层 m…

Stable Diffusion之文生图模型训练

1、数据准备 提前准备好一组相关的照片。 在线的图片处理网站 BIRME - Bulk Image Resizing Made Easy 2.0 (Online & Free) 将图片转成统一大小&#xff0c;支持批量处理&#xff0c;效率高 2、生成提示词 进入stable diffusion webui页面 旧版直接使用 train/proproc…

如何给自己的网站添加 https ssl 证书

文章目录 一、简介二、申请 ssl 证书三、下载 ssl 证书四、配置 nginx五、开放 443 端口六、常见问题解决(一)、配置后&#xff0c;访问 https 无法连接成功(二) 证书配置成功&#xff0c;但是访问 https 还是报不安全 总结参考资料 一、简介 相信大家都知道 https 是更加安全…

医院一站式后勤管理系统 processApkUpload.upload 任意文件上传漏洞复现

0x01 产品简介 医院一站式后勤管理系统由南京博纳睿通软件科技有限公司开发的一款基于现代医院后勤管理理念的业务系统,产品结合后勤业务管理特点,通过管理平台将后勤管理业务予以系统化、规范化和流程化,从而形成一套构建于平台之上且成熟完善的后勤管理体系,并可在此体系…

使用阿里云试用Elasticsearch学习:Search Labs Tutorials 搭建一个flask搜索应用

文档&#xff1a;https://www.elastic.co/search-labs/tutorials/search-tutorial https://github.com/elastic/elasticsearch-labs/tree/main/example-apps/search-tutorial Full-Text Search

Excel报表成果展示

采用Excel函数实现数据的快速计算&#xff0c;如下&#xff0c;看似很复杂&#xff0c;实际非常方便。

文献速递:深度学习肝脏肿瘤诊断---基于深度学习的肝细胞结节性病变在整片组织病理图像上的分类

Title 题目 Deep Learning-Based Classification of Hepatocellular Nodular Lesions on Whole-Slide Histopathologic Images 基于深度学习的肝细胞结节性病变在整片组织病理图像上的分类 Background 背景 Hepatocellular nodular lesions (HNLs) constitute a heterogen…

大模型拥有的数万亿个参数,这个指标如何理解

数万亿个参数这个指标是描述大型人工智能模型复杂度的一个方式。在这个上下文中&#xff0c;一个“参数”可以理解为模型中的一个配置或设置&#xff0c;它决定了模型在处理数据时的行为。这些参数在模型的训练过程中被调整和优化&#xff0c;以便模型能够更好地完成特定任务&a…

理解vuecli和nginx启动Vue项目区别

Vue CLI 和 Nginx 在启动 Vue 项目时各自扮演着不同的角色&#xff0c;它们之间存在一些关键的区别。以下是关于这两者的主要差异&#xff1a; 1.开发环境与部署环境&#xff1a; Vue CLI&#xff1a;Vue CLI 是一个基于 Node.js 的开发工具&#xff0c;主要用于在本地开发环…

面试八股——JVM★

类加载 类加载器的定义 类加载器的类别 类装载的执行过程 类的装载过程&#xff1a; 加载&#xff1a; 验证&#xff1a; 准备&#xff1a; 这里设置初始值并不是传统意义的设置初始值&#xff08;那个过程在初始化阶段&#xff09;。 解析&#xff1a; 初始化&#xff1a; …

序列化结构(protobuf)实现一个TCP服务器(C++)

Protocol Buffers&#xff08;protobuf&#xff09;是一种由Google开发的用于序列化结构化数据的方法&#xff0c;通常用于在不同应用程序之间进行数据交换或存储数据。它是一种语言无关、平台无关、可扩展的机制&#xff0c;可以用于各种编程语言和环境中。 1、首先建立proto文…

Linux服务器下安装Oracle数据库

Linux服务器下安装Oracle数据库详细说明文档&#xff1a;https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Oracle/Linux%E4%B8%8B%E5%AE%89%E8%A3%85Oracle.md ps&#xff1a;如果觉得作者写的还行&#xff0c;能够满足您的需求&#xff0c;请给作者的开源项目st…

白杨SEO:把AI结合SEO优化的工具有哪些?我常用的AIGC工具分享

前言&#xff1a;这是白杨SEO原创第523篇。为什么想到写这个&#xff1f;因为有好几个朋友问我做SEO主要用哪个AI工具来创作&#xff1f;所以就分享一下我用的工具&#xff0c;希望对大家有一点点帮助&#xff0c;需要的可以收藏。图片在公众号白杨SEO上去看。 声明&#xff1…