Linux线程:死锁
1. 死锁
(1)概念
死锁(DeadLock)指两个或两个以上的进程或线程执行时,由于竞争临界资源而造成阻塞的现象;若不干涉,则无法推进下去。
(2)死锁的原因
① 竞争临界资源。
② 进程推进顺序不当。
(3)死锁的必要条件
① 互斥访问:竞争临界资源;
② 不可剥夺:未使用完临界资源不释放;
③ 请求和保持:已占部分临界资源,仍请求被其他进程或线程占用的临界资源;
④ 循环等待:各进程或线程等待彼此释放临界资源。
(4)如何处理死锁
① 预防死锁;
a)破坏请求和保持:协议1. 运行前一次性申请所有所需资源。
协议2. 逐步获取资源,用完立即释放。
b)破坏不可剥夺:请求不到所有资源,则立即释放所有资源。
c)破坏循环等待:对资源进行排序,规定执行者必须按递增顺序请求资源。
② 避免死锁;资源动态分配时,用某种方式防止系统进入不安全状态,如银行家算法。
③ 检测死锁;允许死锁,有死锁则解除。
2. 死锁示例
两个线程,两个临界资源。线程1先申请资源1,再申请资源2,然后执行临界区代码;线程2申请资源2,再申请资源1,然后执行临界区代码。则可能出现死锁。
代码示例:
#include<stdlib.h>
#include<pthread.h>
#include<stdio.h>pthread_mutex_t mutex1;
pthread_mutex_t mutex2;void* worker1(void* arg) {pthread_mutex_lock(&mutex1);printf("线程1得到资源1.\n");pthread_mutex_lock(&mutex2);printf("线程1得到资源2.\n");printf("线程1执行临界区代码.\n");pthread_mutex_unlock(&mutex1);pthread_mutex_unlock(&mutex2);return NULL;
}void* worker2(void* arg) {pthread_mutex_lock(&mutex2);printf("线程2得到资源2.\n");pthread_mutex_lock(&mutex1);printf("线程2得到资源1.\n");printf("线程2执行临界区代码.\n");pthread_mutex_unlock(&mutex1);pthread_mutex_unlock(&mutex2);return NULL;
}int main(int argc, const char* argv[]) {pthread_t tid1, tid2;int ret = -1;ret = pthread_mutex_init(&mutex1, NULL);ret = pthread_mutex_init(&mutex1, NULL);ret = pthread_create(&tid1, NULL, worker1, NULL);ret = pthread_create(&tid2, NULL, worker2, NULL);ret = pthread_join(tid1, NULL);ret = pthread_join(tid2, NULL);ret = pthread_mutex_destroy(&mutex1);ret = pthread_mutex_destroy(&mutex2);return 0;
}
运行结果:
未发生死锁情况:

发生死锁情况:

如何解决上述示例中的死锁问题?
让两个线程申请资源顺序一致。
相关文章:
Linux线程:死锁
1. 死锁 (1)概念 死锁(DeadLock)指两个或两个以上的进程或线程执行时,由于竞争临界资源而造成阻塞的现象;若不干涉,则无法推进下去。 (2)死锁的原因 ① 竞争临界资源…...
thinkphp+vue+html超市零食品美食推荐系统零食购物商城网站7v281
本系统的开发使获取食品推荐系统信息能够更加方便快捷,同时也使食品推荐系统管理信息变的更加系统化、有序化。系统界面较友好,易于操作 运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp5 前端框架:vu…...
思考外语学习的底层逻辑(以英语、法语为例)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言一、英语1.学习历程2.英语学习的心得3.理论检验(持续更新) 二、法语1.学习历程2.读入数据 总结 前言 提示:这里谈谈自己为什么要…...
命名ACL配置
命名ACL配置 【实验目的】 掌握命名ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 S0/3/0 192.168.1.1 255.255.255.252 N/A Fa0/0 192.168.2.1 255.255.…...
2008-2019年主要城市PITI指数
2008-2019年主要城市PITI指数 1、来源:附在文件内 2、时间区间:2008-2019年 3、具体时间分布:、2008、2009-2010、2011、2012、2013-2014、2014-2015、2015-2016、2016-2017、2017-2018、2018-2019、 4、范围:包括110个城市&a…...
拷贝构造函数和赋值重载函数详解
1.拷贝构造函数 1.1拷贝构造函数的概念 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。拷贝构造函数也是特殊的成员函数,其特征如下&#…...
5件关于JavaScript中this参数的事
this 关键字是 JavaScript 中最令人困惑的部分之一,本文试图通过介绍有关它的五个重要事项来阐明其目的和用法。 1、它允许访问同一对象上的其他属性 在 JavaScript 中,函数可以是独立的单元,但它们也可以用作对象的值。考虑下一个对象。 …...
面试题30天打卡-day17
1、什么是内部类? 内部类的分类有哪些 ?内部类的优点 ,内部类有哪些应用场景? 内部类:在一个类中创建一个新的类 内部类主要分为以下4种:成员内部类、局部内部类、静态内部类、匿名内部类。 成员内部类 …...
对标世界一流|弹性应对“供应链不确定性常态化” ——快消与重资产行业的经验互鉴
1963年,气象学家洛伦兹提出的“蝴蝶效应”表示:“一只蝴蝶在巴西扇动翅膀,有可能会在美国德克萨斯州引起一场龙卷风”。本文希望通过提供快消行业的先进实践,帮助重资产企业从“蝴蝶扇动翅膀”之前就开始行动,避免“龙…...
【MPC|云储能】基于模型预测控制(MPC)的微电网调度优化的研究(matlab代码)
目录 1 主要内容 2 程序难点及问题说明 3 部分程序 4 下载链接 1 主要内容 该程序分为两部分,日前优化部分——该程序首先根据《电力系统云储能研究框架与基础模型》上面方法,根据每个居民的实际需要得到响应储能充放电功率,优化得到整体…...
796. 子矩阵的和(C++和Python3)——2023.5.6打卡
文章目录 QuestionIdeasCode Question 输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2 ,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数…...
docker打包部署spring boot应用(mysql+jar+Nginx)
文章目录 一、基本准备二、mysql部署二、jar部署三、Nginx部署 一、基本准备 小唐拿的就是之前放置在我们服务器上的应用进行部署,主要就是mysql和jar还有Vue的部署。 目前已经有的是jar、已经打包好的vue 项目参考:小破站数据大屏可视化(…...
Golang-常见数据结构Slice
Slice slice 翻译成中文就是切片,它和数组(array)很类似,可以用下标的方式进行访问,如果越界,就会产生 panic。但是它比数组更灵活,可以自动地进行扩容。 了解 slice 的本质, 最简单的方法就是…...
操作系统——设备管理
0.关注博主有更多知识 操作系统入门知识合集 目录 1.设备管理概念 2.SPOOLing技术 1.设备管理概念 在计算中,除CPU、内存以外的所有设备统称为外设,即外部设备,例如鼠标、键盘、打印机、摄像头、磁盘、硬盘......那么这些只需要连接到计…...
图片分类:精细化分类,(Fine-Grained Categorization) 基于人的行为的精细化分类
文字大纲 简介数据集常用数据集方法1 : 强监督方法2 : 弱监督传统 ResNet EfficientNet 等Two Level Attention Model双线性网络 Bilinear CNN model参考文献和学习路径简介 细粒度图像识别 (fine-grained image recognition),即 精细化分类。 细粒度图像分类(Fine-Graine…...
Matlab2012a的图像处理工具箱的imshow函数
在处理图片文件时,除了使用matlab自带的image函数,还可以考虑用matlab的图像处理工具箱。这个工具箱提供了imshow和imtool两个函数,可实现图片的显示。 这两个函数都支持Handle Graphics体系结构,它们可创建图像对象,…...
Linux_红帽8学习笔记分享_10(SELinux管理与防火墙)
Linux_红帽8学习笔记分享_10(SELinux管理与防火墙) 文章目录 Linux_红帽8学习笔记分享_10(**SELinux管理与防火墙**)1.Linux系统的安全机制1.1 Filesystem1.2 Service1.3 Firewall1.4 SELinux 2.SElinux理论概述3.SElinux的配置文件3.1 SELINUX参数3.2 SELINUXTYPE参数 4.查看和…...
【资料分享】
文章目录 前言《408统考,真题&解析(2009-2021)》《Android 移动应用基础教程(Android Studio)(第2版)》黑马程序员 源代码《Hackers & Painters》--Paul Graham《数字电路与逻辑设计(第3版…...
NewBing 还无法访问的几个问题
大部分的AI自媒体都在说,Bing new已经向全世界开放了,我也凑一下这个热闹,用Edge浏览器打开,访问https://www.bing.com/new?ccus 想体验一下Bing new的效果,结果如下: 相信很多人都碰到了这个问题 此体验…...
将 Segment Anything 扩展到医学图像领域
文章目录 前言技术交流SAM 拆解分析从医学角度理解 SAM 的效用MedSAM实验总结 前言 SAM 是一种在自然图像分割方面取得成功的模型,但在医学图像分割方面表现不佳。MedSAM 首次尝试将 SAM 的成功扩展到医学图像,并成为用于分割各种医学图像的通用工具。为…...
如何快速提升GitHub下载速度:智能加速工具的完整指南
如何快速提升GitHub下载速度:智能加速工具的完整指南 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否曾经因为Gi…...
NoFences:开源桌面分区神器,让你的数字空间焕然一新
NoFences:开源桌面分区神器,让你的数字空间焕然一新 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 每天打开电脑,你是否也曾面对那一片混…...
如何用嘎嘎降AI处理农学论文:实验数据图表密集的农学毕业论文降AI完整操作教程
如何用嘎嘎降AI处理农学论文:实验数据图表密集的农学毕业论文降AI完整操作教程 关于农学论文降AI教程,有几个细节提前知道,能少走很多弯路。 核心用嘎嘎降AI(www.aigcleaner.com),4.8元,达标率…...
英雄联盟段位修改终极指南:5分钟掌握LeaguePrank伪装技巧
英雄联盟段位修改终极指南:5分钟掌握LeaguePrank伪装技巧 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否想过在英雄联盟中展示不同的段位给好友看?LeaguePrank正是为你量身打造的段位修改神器&a…...
轻量级UI组件库设计:从Web Components到现代前端工程实践
1. 项目概述:一个面向现代Web开发的轻量级UI组件库最近在整理自己的前端工具箱时,又翻到了anuki这个项目。它不是一个新潮的框架,也不是一个庞大的设计系统,而是一个由个人开发者cylonmolting-creator维护的、面向现代Web开发的轻…...
3分钟解锁网易云音乐灰色歌曲:UnblockNeteaseMusic实战指南
3分钟解锁网易云音乐灰色歌曲:UnblockNeteaseMusic实战指南 【免费下载链接】UnblockNeteaseMusic Revive unavailable songs for Netease Cloud Music 项目地址: https://gitcode.com/gh_mirrors/un/UnblockNeteaseMusic 还在为网易云音乐里那些灰色的、无法…...
别再死记硬背了!用这个“水管模型”5分钟搞懂三极管电流放大原理
水管模型:用生活常识5分钟破解三极管放大之谜 第一次接触三极管的同学,往往会被教科书上那些"空穴"、"电子"、"掺杂浓度"之类的术语搞得晕头转向。就像试图通过研究水分子结构来理解自来水管道系统——方向没错࿰…...
Zenity实战:用Shell脚本构建轻量级GTK图形界面
1. Zenity入门:Shell脚本的图形化神器 第一次在终端里看到Zenity弹出一个日历对话框时,我正对着黑底白字的命令行界面发呆。原本需要用户输入复杂日期格式的脚本,突然变成了直观的图形化选择,这种转变让我意识到:原来给…...
在【Excel】、【PowerPoint】、【Word】 和 【Outlook】中与 【Claude】 协同工作
在【Excel】、【PowerPoint】、【Word】 和 【Outlook】中与 【Claude】 协同工作 写在前面:2026 年 5 月 7 日,Anthropic 宣布 Claude for Excel、PowerPoint 和 Word 全面上市(Generally Available),Claude for Outl…...
免费解密网易云NCM文件:一键转换MP3/FLAC完整指南
免费解密网易云NCM文件:一键转换MP3/FLAC完整指南 【免费下载链接】ncmToMp3 网易云vip的ncm文件转mp3/flac - ncm file to mp3 or flac 项目地址: https://gitcode.com/gh_mirrors/nc/ncmToMp3 还在为网易云VIP下载的音乐文件无法在其他设备播放而烦恼吗&am…...
