活锁 & 死锁

简介: 活锁 & 死锁

一、活锁(liveLock)

活锁是指线程间资源冲突激烈,引起线程不断的尝试获取资源,不断的失败。活锁有点类似于线程饥饿,虽然资源并没有被别人持有,但由于各种原因而无法得到。最常见的原因是进程组的执行顺序不合理,导致某些先需要的资源被后置。活锁和死锁的不同在于,活锁的状态是变化的,只是无法达到目的。活锁有可能在一定时间后自动解开,但死锁不能。

二、死锁(Deadlock)

死锁是指在一个并发系统中,多个线程或进程因争夺系统资源而造成的相互等待的一种状态。简言之,就是两个或多个进程或线程无限期地阻塞等待对方占有的资源。死锁是一种常见的并发问题,可能会造成系统资源的浪费和性能下降。

举个简单的例子:


假设有两个程序员 A 和 B 同时需要使用打印机来进行打印学习资料。程序员 A 先占用了打印机不释放,程序员 B 先拿到了电子学习资料不释放。此时:


程序员 A 说:你先给我学习资料,我打印完了就给你打印机

程序员 B 说:不行,你先给我打印机,我打印完了就给你学习资料 此时两个程序员A B就陷入了无限期的互相等待,形成了死锁。


在这个例子中,打印机和文件都是一种资源,程序员 A 和程序员 B 相当于两个线程,每个线程需要占用对方所需的资源才能完成操作。

经典死锁问题:哲学家就餐问题

通过上述例子,我们可以归纳出死锁产生的四个必要条件(缺一不可):

  1. 互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用
  2. 不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
  3. 请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。
  4. 循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样 就形成了一个等待环路

当上述四个条件都成立的时候,便形成死锁。当然,死锁的情况下如果打破上述任何一个条件,便可让死锁消失。

其中最容易破坏的就是 “循环等待”,因此我们最常用的一种阻止死锁的的技术就是“锁排序”,这种方式就可以通过破坏循环等待,阻止死锁发生。


比如还是上面的哲学家就餐,如果规定只能先拿标号比较小的筷子,那么死锁问题自然就不会发生了:

—

相关文章
|
人工智能 监控 算法
【AI 现况分析】AI 应用导致的隐私问题分析
【1月更文挑战第27天】【AI 现况分析】AI 应用导致的隐私问题分析
|
网络架构
OpenWRT使用wifidog实现强制认证的WIFI热点
首先安装wifidog到OpenWRT的路由器:   opkg update   opkg install wifidog    wifidog依赖下面这些模块: iptables-mod-extra iptables-mod-ipopt kmod-ipt-nat iptables-...
3357 0
|
机器学习/深度学习 Java 编译器
解锁硬件潜能:Java向量化计算,性能飙升W倍!
编译优化中的机器相关优化主要包括指令选择、寄存器分配、窥孔优化等,发生在编译后端,需考虑目标平台的指令集、寄存器、SIMD支持等硬件特性。向量化计算利用SIMD技术,实现数据级并行,大幅提升性能,尤其适用于图像处理、机器学习等领域。Java通过自动向量化和显式向量API(JDK 22标准)支持该技术。
515 4
|
11月前
|
网络协议 数据安全/隐私保护 网络架构
|
12月前
|
JavaScript 小程序 Java
基于微信小程序的线上博物馆系统
线上博物馆系统利用互联网与数字技术,实现文化遗产的数字化保护与传播,打破时空限制,推动文化传承与教育创新。结合Java、Vue及Uniapp等技术,构建跨平台、高互动的在线展览平台,提升公众文化体验。
|
IDE 开发工具 图形学
Visual Basic游戏开发:进入娱乐世界的编程
【4月更文挑战第27天】本文引导初学者使用Visual Basic进行游戏开发,强调其易学性、图形支持和Windows兼容性。通过搭建开发环境、学习基础语法,从“猜数字”到“贪吃蛇”游戏实例,逐步进阶。此外,探讨了性能优化、引入游戏引擎和多媒体音效等高级技巧,鼓励开发者用VB开启游戏编程之旅,创造自己的娱乐世界。
600 0
|
SQL 关系型数据库 MySQL
【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
本文详细介绍了MySQL中的多表查询,包括多表关系、隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询及其实现方式,一文全面读懂多表联查!
2874 2
【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
|
存储 关系型数据库 MySQL
为什么MySQL索引使用B+树而不用hash表和B树
支持范围查询:B+树索引在数据结构上有序排列,可以有效支持范围查询,例如大于、小于、区间查询等操作。而哈希表无法支持范围查询,只能进行精确查找,而B树在范围查询操作时性能相对较低。
995 0
|
监控 安全 Linux
Kali渗透测试:远程控制被控端免杀及DLL生成、注入反弹(一)
Kali渗透测试:远程控制被控端免杀及DLL生成、注入反弹(一)
804 0
|
机器学习/深度学习 人工智能 自然语言处理
智能增强:人工智能在创造性写作中的应用与挑战
【8月更文挑战第7天】 本文将深入探讨人工智能(AI)如何革新传统写作领域,特别是在创意性文本创作方面。通过分析AI技术的进步,我们将了解机器学习、自然语言处理等技术是如何被整合进写作工具中,以及它们如何辅助作家提高创作效率和质量。同时,文章也将讨论AI写作所面临的伦理和实践挑战,包括版权问题、创意归属争议及技术局限性。
518 9

热门文章

最新文章