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

    浏览量

    8296
  • 线程
    +关注

    关注

    0

    文章

    508

    浏览量

    20759

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

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

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

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

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

    可以驱动两个直流有刷电机、一双极步进电机的双H桥电机驱动芯片-SS8833E

    电机驱动芯片 - SS8833E是一种双桥电机驱动器,具有两个H桥驱动器,可以驱动两个直流有刷电机、一双极步进电机、电磁阀或其他电感负载。
    的头像 发表于 02-12 09:43 932次阅读
    可以驱动<b class='flag-5'>两个</b>直流有刷电机、一<b class='flag-5'>个</b>双极步进电机的双H桥电机驱动芯片-SS8833E

    两个不同频率晶振靠的近会怎样

    晶振的振荡本质上是一种机械振动(在压电晶体层面)。当两个晶振靠得很近时,它们的机械振动可能会相互影响。一晶振的振动可能会通过电路板或者外壳等介质传递给另一晶振,从而改变另一晶振的
    的头像 发表于 01-20 13:55 2018次阅读
    <b class='flag-5'>两个</b>不同频率晶振靠的近会怎样

    求助,以下两个ADC转换的通道,分别是CC2541上的哪两个引脚啊?

    #define HAL_ADC_CHN_TEMP 0x0e /* Temperature sensor */ #define HAL_ADC_CHN_VDD3 0x0f /* VDD/3 */ 以上两个ADC转换的通道,分别是CC2541上的哪两个引脚啊?
    发表于 01-14 08:15

    TLV320AIC3106有MIC3R MIC3L两个引脚,能不能用这两个引脚单独各接一路MIC输入,从而形成路MIC输入?

    大家好,TLV320AIC3106有MIC3R MIC3L两个引脚,我看EVM上做MIC输入时这两个引脚接在一起用,我想问,能不能用这两个引脚单独各接一路MIC输入,从而形成
    发表于 01-09 06:05

    如何把两个数据返回给调用函数

    函数的处理结果包含两个数据,如何把两个数据返回给调用函数? 第一种,把两个数据封装成一结构体,函数返回结构体。 调用函数的地方同样用结构体去接收函数的返回值。 第二种,把返回值保存在
    的头像 发表于 01-08 10:15 678次阅读

    两个晶体管能如何实现高效正弦波振荡?

    在电子设计中,振荡器是一重要的组件,广泛应用于信号发生、无线通信和音频设备中。一般来说,设计一稳定的正弦波振荡器往往需要运算放大器或复杂的电路结构。然而,是否可以仅用两个晶体管就轻松实现一
    的头像 发表于 01-07 12:00 948次阅读
    <b class='flag-5'>两个</b>晶体管能如何实现高效正弦波振荡?

    ADC124S021同时使用两个通道,两个通道的转换数据发生串扰怎么解决?

    用DSP的SPI接口接ADC124S021,如果只是进行单通道的信号采集,则转换后的数值稳定,但是同时使用两个通道时则两个通道的数据发生串扰现象。如,我单独使用2通道,则转换后数值稳定,但是如果
    发表于 12-30 07:41

    DAC8760的Iout和Vout都有两个TVS防护,这两个各是什么作用?

    1、DAC8760的Iout和Vout都有两个TVS防护,这两个各是什么作用? 2、如果我只希望DAC8760输出0-5V和4-20mA,输出电路的两个TVS都要加么?
    发表于 12-30 06:49

    锂电池品牌厂家影响光伏逆变器效率提升的两个关键因素

    电子元器件的质量和散热设计是影响光伏逆变器效率提升的两个关键因素。我们需要选择高质量的电子元器件,采用合理的散热设计,以提高光伏逆变器的效率和可靠性。同时,我们还需要不断地进行技术创新和优化,推动光伏逆变器技术的发展和进步。
    的头像 发表于 12-19 15:19 815次阅读
    锂电池品牌厂家影响光伏逆变器效率提升的<b class='flag-5'>两个</b>关键因素

    DS90UB941AS是否支持带两个屏? 两个屏是要求一样的参数才行吗?

    DS90UB941AS是否支持带两个屏? 两个屏是要求一样的参数才行么?
    发表于 12-12 06:07