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

    浏览量

    8075
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19675

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

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

收藏 人收藏

    评论

    相关推荐

    单相电机两个绕组都在定子上吗

    单相电机的两个绕组,即起动线圈(或称为辅助绕组、副绕组)和运行线圈(或称为主绕组),都位于定子上 。这两个绕组在电机中起着关键作用,共同协作以产生旋转磁场,从而使电机能够运转。 单相电机通常由一
    的头像 发表于 09-03 15:10 734次阅读

    ad如何设置两个元器件的距离

    在Altium Designer(简称AD)中设置两个元器件之间的距离,主要是通过设置元器件间的安全间距(Clearance)规则来实现的。这个规则定义了元器件之间、元器件与走线之间以及其他设计元素
    的头像 发表于 09-02 15:31 6590次阅读

    sr存器特性表q为什么有两个

    SR存器特性表中Q之所以有两个值,是因为这些值分别代表了存器在不同输入条件下的状态。具体来说,Q的两个值分别对应了存器的“当前状态”(
    的头像 发表于 08-28 09:28 681次阅读

    功放机AB两个声道输出怎么接

    功放机AB两个声道输出的接线方式,主要取决于您想要实现的音频效果以及音箱的配置。以下将详细介绍几种常见的接线方式,以及它们各自的特点和适用场景。 一、基础接线方式 在大多数情况下,功放机的AB两个
    的头像 发表于 08-23 10:40 2626次阅读

    触发器的两个稳定状态分别是什么

    触发器作为数字电路中的基本逻辑单元,具有两个稳定状态,这两个状态通常用于表示二进制数码中的0和1。
    的头像 发表于 08-12 11:01 1036次阅读

    双稳态电路的两个稳定状态是什么

    双稳态电路是一种具有两个稳定状态的电子电路,广泛应用于数字电路、通信系统、存储器等领域。 双稳态电路的基本概念 双稳态电路是一种具有两个稳定状态的电路,即在没有外部输入信号的情况下,电路可以保持在
    的头像 发表于 08-11 15:00 1331次阅读

    双稳态触发器的两个基本性质是什么

    双稳态触发器(Bistable Trigger)是一种具有两个稳定状态的逻辑电路,广泛应用于数字电路设计中。它具有两个基本性质:记忆性和切换性。 一、双稳态触发器的基本概念 1.1 双稳态触发器
    的头像 发表于 08-11 10:08 663次阅读

    互斥和自旋的实现原理

    互斥和自旋是操作系统中常用的同步机制,用于控制对共享资源的访问,以避免多个线程或进程同时访问同一资源,从而引发数据不一致或竞争条件等问题。 互斥
    的头像 发表于 07-10 10:07 484次阅读

    两个路由器ip地址冲突怎么解决

    两个路由器的IP地址发生冲突时,会导致网络连接不稳定或无法连接。以下是解决两个路由器IP地址冲突的步骤: 确定冲突的IP地址 首先,需要确定两个路由器的IP地址是否冲突。可以通过以下方法来检查
    的头像 发表于 07-09 11:35 5726次阅读

    两个PLC之间如何交互信号

    在工业自动化系统中,PLC(Programmable Logic Controller,可编程逻辑控制器)是核心的控制设备。在许多复杂的应用场景中,需要两个或多个PLC之间进行信号交互,以实现更高
    的头像 发表于 06-14 16:57 4275次阅读

    两个铜片可以形成原电池吗

    两个铜片本身不能形成原电池,因为原电池的工作原理依赖于两个不同电位的电极材料之间的氧化还原反应。
    的头像 发表于 05-21 16:23 939次阅读

    原电池中的两个电极能是相同的吗?

    在原电池的设计和运作中,两个电极是否可以相同,这取决于电池的类型和所需的电化学反应。
    的头像 发表于 04-26 17:32 2221次阅读

    arcgis中如何关联两个属性表

    在ArcGIS中,关联两个属性表是一重要的操作,可以通过此操作将两个表中的数据关联起来,以便进行分析和查询。下面是详细介绍如何在ArcGIS中实现属性表的关联。 首先,我们需要明确两个
    的头像 发表于 02-25 11:01 4187次阅读

    两个电位器地控制一变频器,如何接线?

    两个电位器地控制一变频器,如何接线? 接线方式如下: 1. 首先,明确需要使用的电器设备。在这个场景中,我们需要两个电位器(即可变电阻器)和一
    的头像 发表于 02-05 10:13 5223次阅读

    两个机器的时钟怎么同步?

    两个机器的时钟怎么同步? 在现代社会中,时间同步对于各种科学研究、工业生产和通信技术都具有重要意义。在许多应用程序中,如分布式系统、计算机网络和数据同步等领域,为了确保数据的一致性和准确性,需要确保
    的头像 发表于 01-16 14:26 1614次阅读