【Linux操作系统】死锁

news2024/11/19 6:15:19

文章目录

  • 死锁的概念
  • 产生死锁问题的必要条件
  • 如何避免死锁


有两个小朋友站在超市的零食区,手上各拿着五毛钱,他们直勾勾的看着眼前的棒棒糖,问了问阿姨,这个棒棒糖要一块钱。所以a对b说:“你把你的五毛钱给我买棒棒糖”,b不乐意了,说:“凭什么,你把你的五毛钱给我,我买棒棒糖”,然后呢,这两个小朋友就在超市一直争执,谁都不想把自己手中的五毛钱让出去。那么在这个场景中,两个小朋友就是两个线程,他们两人手上的五毛钱就相当于临界锁,棒棒糖相当于临界资源,超市的阿姨相当于OS操作系统。

死锁的概念

死锁是指在一组进程中的各个进程均占用不会释放的资源,但因互相申请被其它进程所占用的不会释放的资源而处于一种永久等待的状态。

一把锁可能产生死锁吗?

可能。程序员申请一把锁,访问临界资源,本来该释放,结果写错了,他又写成申请一把锁,所以一个执行流同时申请同一把锁,申请两次的时候,当他在第二次申请锁的时候,就挂起了,自己就把自己死锁了。所以一把锁的情况也可能出现死锁。这就是“骑驴找驴了”。

产生死锁问题的必要条件

  1. 互斥条件:一个资源每次只能被一个执行流使用。
  2. 请求与保持:一个执行流因请求资源而阻塞时,对已获得的资源保持不放。回到最开始讲的小故事,a请求b给他五毛钱,但是a手上还拿着五毛钱,即一个线程申请锁,当时它的锁还未释放,这就叫做请求和保持。
  3. 环路等待(循环等待条件):若干执行流之间形成一种头尾相接的循环等待资源的关系。
  4. 不剥夺条件:一个执行流已获得的资源,在未使用完之前,不能强行剥夺。

如何避免死锁

核心思想:破坏死锁的4个必要条件之一

1.不加锁(破坏互斥条件)
2.主动释放锁,避免锁未释放的场景(破坏请求与保持)
3.按顺序申请锁(破坏环路等待条件)
4.控制线程统一释放锁,资源一次性分配

ps:加锁和解锁不一定非要在一个线程内进行,可以跨进程!

在这里插入图片描述

在这里插入图片描述

运行结果:
在这里插入图片描述

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

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

相关文章

Spring Cloud Hystrix简单实用

文章目录 一、简介二、快速开始1、pom依赖2、启动类注解3、服务降级配置HystrixCommand4、配置熔断策略5、测试 三、原理分析四、实际使用 一、简介 Hystrix,英文意思是豪猪,全身是刺,刺是一种保护机制。Hystrix也是Netflflix公司的一款组件。…

Controller配置总结与RequestMapping

1.Controller 2.ResquestMapping 就一个父级目录与自己目录的一个关系!!!理清楚就好了,很好理解!

MURF20100CTR-ASEMI快恢复对管MURF20100CTR

编辑:ll MURF20100CTR-ASEMI快恢复对管MURF20100CTR 型号:MUR20100CTR 品牌:ASEMI 芯片个数:2 封装:TO-220F 恢复时间:50ns 工作温度:-50C~150C 浪涌电流:200A 正向电流&am…

[JVM] 2. 类加载子系统(1)-- 内存结构、类加载子系统概述

一、内存结构 类加载子系统的职责是:加载class文件到内存中。 完整的内存结构如下: 二、类加载过程 类加载过程总体分为Loading(加载)、Linking(链接)、Initialization(初始化)三…

【力扣每日一题】2023.7.15 四数之和

题目: 示例: 分析: 这题和本月出过的每日一题:两数之和,三数之和类似。 不夸张的说只要把三数之和的代码拿来再套层for循环改改就可以了。 不过我这里还是简单捋一捋思路,题目给一个数组,要求…

玩转数据可视化之R语言ggplot2:(十四)层级布局(一层一层增加你的绘图元素,使绘图更灵活)

【R语言数据科学可视化篇】 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括: R语言编程基础、R语言可…

代码随想录二刷day53 | 动态规划之子序列 1143.最长公共子序列 1035.不相交的线 53. 最大子序和

day53 1143.最长公共子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 1035.不相交的线53. 最大子序和1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如…

数据结构_进阶(1):搜索二叉树

1.内容 建议再看这节之前能对C有一定了解 二叉树在前面C的数据结构阶段时有出过,现在我们对二叉树来学习一些更复杂的类型,也为之后C学习的 map 和 set 做铺垫 1. map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一种树形结构2. 二叉搜…

分布式事务-本地消息表

本地消息表方案核心思路 需要分布式处理的任务通过消息日志的方式来异步执行。消息日志可以存储到本地文本、数据库或消息队列,再通过业务规则自动或人工发起重试。 方案核心具体实现 包括数据模型和核心逻辑 业务规则 定义业务的消息配置如topic 、key、tag …

计算机网络基础-OSI七层模型 和 TCP/IP四层模型的对比

OSI七层模型 和 TCP/IP四层模型的对比 OSI七层模型: 理论上的网络通信模型 记忆: (物、链、网、输、会、示、用) TCP/IP四层模型: 实际上的网络通信标准 (1) 七层网络体系结构各层的主要功能: 应用层: 最上层的&am…

linux X系统 X窗口系统(X Window System)

Xorg是一个开放源代码的跨平台的图形系统,它是UNIX和Linux的主要图形系统,它的前身是XFree86。 Xorg是在桌面环境中提供显示和图形输入设备支持的主要架构。 它支持多种输入设备,如键盘,鼠标,触摸屏,手写板…

河南理工大学高校专区入驻飞桨AI Studio,优质教育资源等你来学!

近日,河南理工大学高校专区在飞桨人工智能学习与实训社区AI Studio上线,双方将携手搭建人工智能教学实训平台专区,汇集优质教学实训资源,校企共同培育复合型 AI 人才,为国家输送高质量人才,促进国家智能化进…

放射医学、影像医学、数字图像技术(采集和处理)PACS源码

PACS是一个涉及放射医学、影像医学、数字图像技术(采集和处理)、计算机与通讯、C/S体系结构的多媒体数据库管理信息系统,涉及软件工程、图形图像的综合及后处理等多种技术,是一个技术含量高、实践性强的高技术复杂系统。 系统概述: 1&#x…

编译原理(双语) 期末复习

在我的博客查看: https://chenhaotian.top/study/compilation-principle-final-review/ 编译原理(双语) 期末复习 注意:部分资料来自 chouxianyu.github.io,版权归原作者所有。 本文图片较多,加载速度受…

轻松实现文件改名——批量将日语文件名翻译成中文命名

文件改名是在处理大量文件时常见的需求,特别是当文件名用外语表示时,不太方便理解或分类。本教程将介绍如何使用便捷工具,批量将日语文件名翻译成中文命名,以提高文件的可读性和管理效率。 首先,第一步进入文件批量改…

走进分布式系统(分布式系统简介)

走进分布式系统 分布式系统简介分布式系统的架构演变过程初创期发展期成熟期 分布式系统的特性什么是分布式系统特性 分布式系统带来的问题 分布式中间件简介什么是分布式中间件常用的分布式中间件 分布式系统简介 分布式系统的架构演变过程 讲在前面,首先我们要了…

【uniapp】文件授权验真系统(含代码)

文章目录 前言一、框架选用二、数据库设计三、设计上传列表四、上传操作1.前端2.后端 五、修改操作六、访问操作七、二维码生成八、二维码访问九、删除操作总结 前言 吐槽:终于开通了【资源绑定】的功能了,之前还要一个一个的去贴链接 之前的同学联系…

ts学习基础篇(一)

旨在记录! 这篇人都学废了,本想记录常用类型,越学越多,每一个都很重要… 一、string: 字符串类型二、number: 数字类型三、boolean: 布尔值四、array:数组五、tuple: 元组六、字面量七、object:对象八、any: 任意类型九、unknown:…

【KingFusion】用趋势曲线组件实现实时曲线的步骤

哈喽,大家好,我是雷工! 本节学习测试用KingFusion趋势曲线组件实现电流的实时曲线的展示。 一、效果演示: 展示实时曲线的运行效果,效果为KingFunsion3.6通过KingIOServer连接现场系统中实际数据的演示效果。 二、…

代码随想录-单调栈|ACM模式实践

代码随想录感想 ​​​​​​739. 每日温度 题目描述: 输入输出示例: 思路和想法: 496. 下一个更大元素 I 题目描述: 输入输出示例: 思路和想法: 503. 下一个更大元素 II 题目描述: …