什么是死锁?产生死锁的原因?产生死锁的四个必要条件?死锁的避免与预防?

简介: 什么是死锁?产生死锁的原因?产生死锁的四个必要条件?死锁的避免与预防?

一、什么是死锁?

当两个或两个以上的进程同时执行时,因为竞争一个资源或彼此通信时产生的一种阻塞现象,如果没有外力的情况下,他们将一直处于互相等待的状态,不能继续推进下去,这种情况称为死锁。

二、产生死锁的原因:(两个)

1. 对共享资源的竞争          2. 进程推进顺序不当

三、产生死锁的四个必要条件:(四个条件中任意一个条件不满足都不会产生死锁)

1. 互斥条件   2. 请求与保持条件    3. 不可剥夺条件    4. 循环等待条件

四、死锁的避免与预防:

死锁避免的基本思想:系统会将进程发出的每一个满足资源申请的系统进行检查,根据检查的结果判断是否会产生死锁,会的话就不分配资源,不会产生死锁就分配资源。

我们可以通过产生死锁的四个原因进行避免、预防和解决死锁。只要打破四个条件中的任意一个条件就可以。

1. 打破互斥条件    2. 打破请求与保持条件    3. 打破不可剥夺条件   4. 打破循环等待条件

相关文章
|
存储 算法 NoSQL
还分不清 Cookie、Session、Token、JWT?看这一篇就够了
Cookie、Session、Token 和 JWT(JSON Web Token)都是用于在网络应用中进行身份验证和状态管理的机制。虽然它们有一些相似之处,但在实际应用中有着不同的作用和特点,接下来就让我们一起看看吧,本文转载至http://juejin.im/post/5e055d9ef265da33997a42cc
52261 16
|
SQL 缓存 监控
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
|
消息中间件 存储 Java
MQ核心作用、解耦、削峰使用场景详解
【11月更文挑战第21天】在如今的高并发互联网应用中,如何确保系统在巨大的流量冲击下还能稳定运行,是每个技术团队都会遇到的挑战。说到这,消息队列(MQ)就是背后的“大功臣”了。无论是异步处理请求、平滑应对流量高峰,还是让各个系统模块相互独立不“拖后腿”,MQ都是不可或缺的帮手。那么,MQ是如何削峰的?或者它是如何让复杂系统解耦的?今天,我们就来聊聊MQ的三大核心功能,看它是如何助力系统高效、稳定运转的。
1360 1
|
关系型数据库 MySQL 数据库
MySQL高级篇——MVCC多版本并发控制
什么是MVCC、快照读与当前读、隐藏字段、Undo Log版本链、ReadView、举例说明、InnoDB 解决幻读问题
MySQL高级篇——MVCC多版本并发控制
|
网络协议 算法 网络性能优化
|
Java
探秘死锁:原理、发生条件及解决方案
探秘死锁:原理、发生条件及解决方案
1112 1
【多线程面试题十三】、说一说synchronized与Lock的区别
这篇文章讨论了Java中`synchronized`和`Lock`接口在多线程编程中的区别,包括它们在实现、使用、锁的释放、超时设置、锁状态查询以及锁的属性等方面的不同点。
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
18266 7
《跟老卫学仓颉编程语言开发》实战:猜数字游戏
本文介绍了用仓颉语言开发的一个简单猜数字游戏,综合运用了流程控制、标准输入、字符串操作和整型比较等知识。程序生成1到100之间的随机整数,用户通过标准输入猜数字,程序提示“太大”或“太小”,直至猜中并显示祝贺信息。代码使用`std.console`包处理输入,`std.convert`包实现字符串转整型,通过`if-else`判断大小,`while`循环支持多次输入。示例源于《跟老卫学仓颉编程语言开发》,源码可在其GitHub仓库获取。
844 0
|
安全 中间件 编译器
【C/C++ 原子操作】深入浅出:从互斥锁到无锁编程的转变 - 理解C++原子操作和内存模型
【C/C++ 原子操作】深入浅出:从互斥锁到无锁编程的转变 - 理解C++原子操作和内存模型
7135 3