死锁、活锁、饿死和阻塞的个人理解

什么是线程饿死,什么是活锁? 活锁和死锁都是并发编程中的问题,它们都导致线程无法正常执行。它演示了线程饿死和活锁的情况,其中两个线程相互等待对方释放锁,或者尝试避免对方,但由于争夺资源而无法继续执行。:线程饿死是指一个或多个线程由于某种原因无法获取所需的资源或执行机会,导致它们无法继续正常执行,从而被阻塞在某个状态,不能完成其任务。:活锁是一种特殊的死锁情况,其中线程不断地改变其状态以尝试避免死锁,但最终导致了无限循环,无法继续执行。:在活锁情况下,线程可能不停地交互,试图避免彼此之间的冲突,但最终无法成功,导致它们陷入了循环。 阅读详情

以下个人理解,请各位前辈多多指教:

死锁:

① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,如果此时还有其他进程请求资源,则请求者只能等待,直至占有资源的进程被释放。

② 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

③ 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

④环路等待条件:在发生死锁时,必然存在一个进程,资源的唤醒链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

013235e4qr444wstea7e7q.png

解释:

线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占用),于是三方僵死;
也可以是没有C 的情况下,A和B互不礼让僵死.
A和B都认为自己优先级较高应该使用该进程.

活锁:

活锁指的是任务或执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败。活锁和死锁的区别在于,处于活锁的实体在不断的改变状态,而处于死锁的实体表现为等待,活锁有可能自行解开,死锁则不能。

011037wiqkk503zrw7jrow.png
解释:线程A和B都需要过桥(都需要使用进程),而都礼让不走(那到的系统优先级相同,都认为不是自己优先级高),就这么僵持下去.

饿死:

指一个可运行的进行尽管能继续执行,但被调度器无限期的忽视,而不能被调度执行的情况,饿死可以根据先来先服务资源分配策略来避免。

011939pzgobb3pud8pogxf.png解释:

这是个独木桥(单进程),桥上只能走一个人,B来到时A在桥上,B等待;
而此时比B年龄小的C来了,B让C现行(A走完后系统把进程分给了C),
C上桥后,D又来了,B又让D现行(C走完后系统把进程分个了D)
以此类推B一直是等待状态.

阻塞:

011941vt09t8xtjtiqzouz.png不用解释了吧?

 

江疏影讲Java@目录

OrthoFinder功能、流程和文件注释 OrthoFinder 的标准输出包括:直系同源组,直系同源基因,有根基因树,解析基因树,无根物种树、有根物种树,基因重复事件以及相关的统计数据。 阅读详情

相关推荐

BQ4050开发进阶(二):Protections参数优化策略与实战解析

本文深入解析了BQ4050电池管理芯片中Protections参数的优化策略与实战方法。针对电压、电流、温度等核心保护功能,详细阐述了如何根据具体电芯特性、负载场景和环境因素,精细调整CUV、COV、OCC/OCD等阈值与延时,以在确保电池绝对安全的前提下,实现极致的用户体验与系统可靠性。

rgv234567的博客 483

活锁 & 死锁

活锁死锁成因 & 破解方法

LEE180501的博客 3076

STM32驱动AD2S1210实现旋变解码与角度读取

旋转变压器作为一种耐高温、抗振动的角度传感器,在工业伺服、机器人关节和电动汽车电驱等场景中占据重要地位。其输出信号需要经过专用转换芯片处理才能被MCU高效使用。AD2S1210是一款典型的旋变数字转换器(RDC),内部采用Type II型跟踪环,将模拟SIN/COS信号实时解算为数字角度与速度,降低了处理器负担并提升抗干扰能力。本文基于STM32平台,详细介绍了AD2S1210的硬件接线、SPI通信配置、寄存器初始化流程,以及读取位置数据时的SAMPLE脉冲时序等关键实现。同时总结了常见故障如全FF、角度跳

weixin_34194829的博客 196

死锁、活锁的理解

看到一组漫画,很形象的说明了死锁、活锁和饿死的区别,原文链接:http://f.dataguru.cn/thread-541686-1-1.html ,这篇文章的死锁有点问题,死锁参考的:https://www.cnblogs.com/lance43990740/p/6853631.html (话糙理不糙) 1.死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一...

The shortest answer is doing 3618

汽车诊断之UDS入门-0x19 0x0A服务

0x19 0x0A解析

weixin_44842720的博客 3837

SAP 资产主数据屏幕增强:对比字段追加与子屏幕/页签 2 种方案优劣

本文深入对比了SAP资产主数据(AS01/AS03)屏幕增强的两种方案:字段追加与子屏幕/页签。从技术实现、业务适配、系统维护等维度分析各自优劣,提供方案选型决策树和混合方案实践建议,帮助企业在SAP实施中做出最优选择。

weixin_28559803的博客 285

死锁(Deadlock)与活锁(Livelock)的区别?

死锁指的是两个或多个进程在互相请求对方占有的资源时,由于彼此之间的占用资源和等待资源形成了环路,导致所有参与的进程无法继续执行的状态。

程序猿老白~的博客 2797

钣金设计高薪进阶:从材料工艺到DFMA降本增效全解析

钣金设计是机械制造领域的核心技术之一,它涉及将金属板材通过切割、折弯、焊接等工艺成型为所需零件。其核心原理在于深刻理解材料特性、制造工艺约束与结构力学,以确保设计在功能、成本与可制造性之间取得最佳平衡。这项技术的价值在于,优秀的钣金设计能直接驱动产品降本增效,通过优化材料利用率、简化装配工序和避免设计缺陷,为企业节省大量模具与生产成本。其应用场景广泛,从机箱机柜、汽车部件到电子设备外壳无处不在。本文将聚焦于实现这一价值的关键路径,深入探讨面向制造与装配的设计(DFMA)原则在钣金领域的实战应用,并剖析如何通

weixin_34301132的博客 395

死锁和活锁

一、多线程的资源竞争 多线程编写的复杂度其实就是体现在资源的竞争控制上,这个在以前的文章中反复提到过。资源竞争主要是两种情况,数据竞争和执行任务竞争。通过前面的文章介绍可以知道,锁可以解决这些问题,但如何更好的处理竞争问题并达到最优,这就需要策略和算法了。包括提到的无锁编程,其实也是一种解决的策略。 无论是在单核亦是多核的情况下,资源的竞争总是不可避免的,所以对资源的控制就是需要认真对待的一个问题。 二、死锁 所谓死锁,其实就是“集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程

fpcc的专栏 5684

FPGA可重构技术

介绍FPGA 可重构技术的实现方法,包括全局重构和部分重构

航天领域资深码农,型号经验丰富,一线干货分享 1989

牛耕式全覆盖算法-matlab代码

牛耕式路径全覆盖算法,也称为牛耕算法或者蚂蚁算法,是一种用于解决路径规划问题的启发式算法。这个算法的灵感来自于牛在耕田时的行为。在这个算法中,假设有一块田地需要耕作,牛从田地的某个角落开始行走,走过的路径会被标记。牛会优先选择尚未经过的路径,当所有的路径都走过后,算法停止。在路径规划问题中,田地可以看作是一个由节点和边构成的图。每个节点代表一个位置,每条边代表两个节点之间的连接。路径全覆盖问题是找出一组路径,使得每个节点都被至少一条路径经过。牛耕式路径全覆盖算法的基本思想是以启发式的方式逐步构建路径。

m0_69611489的博客 1690

java中活锁和死锁的区别_死锁、活锁、饿死和阻塞的个人理解

以下个人理解,请各位前辈多多指教:死锁:① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,如果此时还有其他进程请求资源,则请求者只能等待,直至占有资源的进程被释放。② 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。③ 不剥夺条件:指进程已获得的资源,在未使用完...

weixin_39959569的博客 227

VMware 虚拟机里连不上网的五种解决方案

在VMware虚拟机里的虚拟机系统连接不上网络 首先,注意查看适配器选项里的网络连接这两个网络连接是否存在,如果不存在可以重新装一下VM 如果存在,连不上网 解决办法一: 虚拟机设置里,找到“网络适配器”,右边的网络连接选择“NAT 模式”,如果不行的话再linux系统。还是不行的话接着看第二种解决方案。 解决方法二: 可能原因是VMware NET Service...

墨轩 18万+

死锁,活锁,饥饿,阻塞,无锁

目录 1 死锁 2 活锁 3 饥饿 4 阻塞 5 无锁 6 活锁与死锁解决方法 1 死锁 死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 死锁发生的条件 互斥条件:线程对资源的访问是排他性的,如果一个线程对占用了某资源,那么其他线程必须处于等待状态,直到资源被释放。 请求和保持条件:线程T1至少已经保持了一个资源R1

mocas_wang的博客 2157

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

死锁、活锁和饿死的理解(转)

死锁、活锁和饿死的理解(转) 看到一组漫画,很形象的说明了死锁、活锁和饿死的区别,原文链接:http://f.dataguru.cn/thread-541686-1-1.html ,这篇文章的死锁有点问题,死锁参考的:https://www.cnblogs.com/lance43990740/p/6853631.html (话糙理不糙) 1.死锁:是指两个或两个以上的进程(或线程)在执行过程中...

ll148305879的博客 3969

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【转发】死锁、活锁和饿死的理解

死锁、活锁和饿死的理解(转) - SunnyCx - 博客园 死锁、活锁和饿死的理解(转) 看到一组漫画,很形象的说明了死锁、活锁和饿死的区别,原文链接:提示信息-炼数成金-Dataguru专业数据分析社区,这篇文章的死锁有点问题,死锁参考的:死锁与活锁的区别,死锁与饥饿的区别 - lx_lance - 博客园(话糙理不糙) 1.死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永..

qq_17056391的博客 215

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

并发编程之临界区\阻塞\非阻塞\死锁\饥饿\活锁

并发编程之临界区\阻塞\非阻塞\死锁\饥饿\活锁

字母哥博客 832

死锁,活锁,饿死,优先级反转,护航现象 (转)

转载:https://www.cnblogs.com/roadmap99/p/6868946.html 死锁(deadlock) 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死...

848

【JavaEE初阶】深入理解wait和notify以及线程饿死的解决

本期讲解了关于wait的使用方法,对应的notify的操作,以及线程饿死的场景演示;当然还有在使用wait和notify时的使用注意事项,还附上了对应代码供uu们参考参考

GGBond778的博客 1704

揭秘!计算机世界的四大“生死劫”:死锁、活锁、饿死和阻塞,你中招了吗?

在这个数字化的时代,我们的工作与生活越来越依赖于计算机系统。但你是否曾经遇到过这样的困扰:程序运行得莫名其妙地慢,甚至完全卡住不动?这背后,可能是计算机科学中的四大难题在作祟——死锁、活锁、饿死和阻塞。今天,就让我们一起揭开它们的神秘面纱,看看这些“生死劫”究竟是何方神圣!

Q2024107的博客 629

进程的活锁、死锁、饥饿和阻塞

死锁: 解释: 线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占用),于是三方僵死;          也可以是没有C 的情况下,A和B互不礼让僵死.          A和B都认为自己优先级较高应该使用该进程.活锁: 解释:线程A和B都需要过桥(都需要使用进程),而都礼让不走(那到的系统优先级相同,都认为不是自己优先级高),就这么僵持下去.饿死: 解释:这是个独木桥(单进程),...

eacxzm的博客 1143

多线程<二>死锁,活锁,饿死,阻塞的理解

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html 死锁 死锁 线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占...

weixin_33788244的博客 1434

死锁活锁饥饿阻塞无锁:高并发故障诊断与预防实战

并发编程中的死锁、活锁、饥饿、阻塞和无锁,本质是多线程/进程在共享资源调度中产生的确定性失效现象。其底层原理源于操作系统资源分配模型(如循环等待、占有并等待)与CPU原子指令能力的边界博弈;技术价值在于保障系统在高负载下的可用性与响应确定性;典型应用场景覆盖Java线程池卡顿、SQL Server数据库死锁、Linux系统级dbus阻塞及实时风控系统的低延迟要求;而本文聚焦于从jstack线程快照、SQL Server死锁图到CPU+日志联合分析的真实战场方法论,尤其深入解析死锁四条件验证、活锁的RUNNA

weixin_34008805的博客 230

java 活锁 线程饿死,JAVA并发编程(四)线程死锁、饥饿、活锁

JAVA并发编程(四)线程死锁线程死锁什么是线程死锁呢?为什么会线程死锁呢?如何避免线程死锁?什么是饥饿呢?什么是活锁呢?线程死锁什么是线程死锁呢?死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的情况,并且在无外力作用的情况下,这些线程会一直相互的等待,而无法继续等待下去。死锁应该是最糟糕的一种情况了(当然,其他几种情况也好不到哪里去),如下图显示了一个死锁的发生: A、B...

weixin_42393929的博客 327
上一篇: 【Java 多线程 4】Java守护线程
下一篇: 【编写高质量代码:改善Java程序的151个建议】第1章:Java开发中通用的方法和准则___建议1~13
哪 吒
哪 吒 2022年度博客之星TOP 1 2022年度博客之星TOP 1 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 59万+粉丝 2953原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值