0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

两个线程,两个互斥锁如何形成死锁

strongerHuang 来源:strongerHuang 作者:一口Linux 2020-12-28 09:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

两个线程,两个互斥锁如何形成死锁?

程序流程图如下:

c1122ad4-46d6-11eb-8b86-12bb97331649.png

程序流程图

如上图所示:

t0时刻,主线程创建子线程,并初始化互斥锁mutex1、mutex2;

t1时刻,主线程申请到了mutex1、子线程申请到了mutex2;

t2时刻,主线程和子线程都sleep 1秒钟,防止优先获得时间片的线程直接申请到了另外1个互斥锁,导致程序直接退出;

t3时刻,主线程和子线程都想获得对方手里的互斥锁,但是对方都来不及释放自己手里的锁;

t4时刻,主线程和子线双双进入休眠。

【注意】为了保证主线程和子线程都能够分别获得锁mutex1、mutex2,各自获得锁后一定要先sleep 1秒钟,否则创建完子线程后,主线程还有一定的时间片,主线程会申请到锁mutex2,无法形成死锁。

死锁

源码如下

o4YBAF_pNF-AMP79AABcucKRsVw255.jpg

pIYBAF_pNGaAFWMGAACMZONs3TM009.jpg

pIYBAF_pNGyAUgCQAABZTHs3PoA856.jpg

编译运行

从执行结果可以判断,主线程和子线程分别获得了互斥锁mutex1、mutex2,sleep 1秒后,他们都想再分别申请mutex2、mutex1,而双方都不想释放自己手中的锁,锁已形成了死锁,程序就一直处于休眠状态。

查看下该进程的线程

查看进程ID,为4204

查看该进程创建的线程id:4204、4205。

责任编辑:xj

原文标题:两个线程,两个互斥锁,怎么形成一个死循环?

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 死锁
    +关注

    关注

    0

    文章

    25

    浏览量

    8332
  • 线程
    +关注

    关注

    0

    文章

    510

    浏览量

    20868

原文标题:两个线程,两个互斥锁,怎么形成一个死循环?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FreeRTOS_SMP_Example_S32K358_2xCores示例配置并实现了一SMP项目,两个核心的中断频率比较高时报故障,怎么解决?

    情况是两个核心都被死了。第二条件是,一核心被锁定,而另一核心工作。可能是什么原因?下面是两个
    发表于 03-30 08:23

    图像上两个多边形的ROI区域,如何获得这两个ROI区域重合部分的ROI

    labview中,图像上两个多边形的ROI区域,如何获得这两个ROI区域重合部分的ROI
    发表于 03-16 14:03

    两个RS485(Modbus RTU)主站与主站之间如何通讯

    本产品能很好解决Master-1主站向模块写入数据,Master-2主站读取数据;Master-2主站向模块写入数据,Master-1主站读取数据。由此解决两个主站之间的互相读通信难题。
    的头像 发表于 02-08 15:32 860次阅读
    <b class='flag-5'>两个</b>RS485(Modbus RTU)主站与主站之间如何通讯

    两个RS485-Modbus主站如何通讯

    本产品能很好解决Master-1主站向模块写入数据,Master-2主站读取数据;Master-2主站向模块写入数据,Master-1主站读取数据。由此解决两个主站之间的互相读通信难题。
    发表于 02-08 15:32 0次下载

    使用博图(TIA Portal)监控PROFINET从站通讯状态的两个方法

    如何使用博图监控Profinet从站通讯状态,这里有两个方法供你选择。 方法一 | 使用DeviceStates指令 创建全局数据块 在博图项目中,创建一全局数据块(DB),用于存储从站状态信息
    的头像 发表于 01-17 11:21 1485次阅读
    使用博图(TIA Portal)监控PROFINET从站通讯状态的<b class='flag-5'>两个</b>方法

    曙光存储连续斩获两个行业奖项

    近期,曙光存储连续斩获两个行业奖项,自研技术产品在国产突破、AI行业应用等方面的成果获得广泛关注。
    的头像 发表于 01-15 16:28 2699次阅读

    FreeRtos 能否同时使用两个 CPU?

    的情况下,CM0 更愿意专门用于管理外设。 - 是否有在 CM0 和 CM4 中同时运行代码的简单示例或教程? - FreeRtos 能否同时使用两个 CPU?
    发表于 11-11 08:28

    硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash?

    硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash,有一norf
    发表于 09-26 06:18

    基本半导体连获两个行业奖项

    近日,基本半导体凭借在碳化硅模块领域的突出表现,连获“国产SiC模块TOP企业奖”和“年度优秀功率器件产品奖”两个行业奖项。
    的头像 发表于 09-05 16:31 1224次阅读

    图中两个按键开关是两个干簧管,为什么不直接对GND设计来检测这个干簧管通断呢?

    图中两个按键开关是两个干簧管,为什么不直接对GND设计来检测这个干簧管通断呢? 这样设计的原理是什么?
    发表于 06-17 06:30

    看到STM8L152用两个IO用两个或非门检测两个通断,是什么原理呢?

    图中两个按键开关是两个干簧管,为什么不直接对GND设计来检测这个干簧管通断呢? 这样设计的原理是什么?
    发表于 06-12 06:25

    用于四频 GSM / GPRS / EDGE 的 Tx-Rx FEM,带两个 Rx 交换机端口和双频 TD-SCDMA skyworksinc

    电子发烧友网为你提供()用于四频 GSM / GPRS / EDGE 的 Tx-Rx FEM,带两个 Rx 交换机端口和双频 TD-SCDMA相关产品参数、数据手册,更有用于四频 GSM
    发表于 05-29 18:31
    用于四频 GSM / GPRS / EDGE 的 Tx-Rx FEM,带<b class='flag-5'>两个</b> Rx 交换机端口和双频 TD-SCDMA skyworksinc

    ADAU1787四ADC、两个DAC、带音频DSP的低功耗编解码器技术手册

    ADAU1787 是一款具有四输入和两个输出的编解码器,其中整合了两个数字信号处理器 (DSP)。从模拟输入到 DSP 内核再到模拟输出的路径已针对低延迟进行优化,适用于噪声消除耳机。通过加入少量无源组件,ADAU1787 提
    的头像 发表于 05-12 14:57 1708次阅读
    ADAU1787四<b class='flag-5'>个</b>ADC、<b class='flag-5'>两个</b>DAC、带音频DSP的低功耗编解码器技术手册

    allegro 两个pth孔重叠不报drc

    allegro 如图两个pth孔重叠了!怎么设置可以不报drc!网上的关闭drc,忽略啥的都没用看到!
    发表于 04-23 09:27

    两个EMC抗干扰的经典案例

    一前言从辐射角度总结来说,形成天线效应的可能有三种情况;从辐射抗干扰角度来说,单极子天线和环形天线需要重点寻找及关注,定向的找到这些等效天线或许就能解决问题。下面以篇案例介绍。二手持抗干扰测试在手
    的头像 发表于 04-22 11:33 1496次阅读
    <b class='flag-5'>两个</b>EMC抗干扰的经典案例