切换导航
{{systemName}}
{{ info.Title }}
{{info.Title}}
{{ menu.Title }}
{{menu.Title}}
登录
|
退出
搜索
什么是死锁?死锁产生的原因?如何避免死锁?
作者:ych
### 一、什么是死锁? 如果一个进程集合里面的每个进程都在等待这个集合中的其他一个进程(包括自身)才能继续往下执行,若无外力他们将无法推进,这种情况就是死锁,处于死锁状态的进程称为死锁进程。 ### 二、死锁产生的原因? 1.因竞争资源发生死锁现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象; (1)可剥夺资源和不可剥夺资源:可剥夺资源是指某进程在获得该类资源时,该资源同样可以被其他进程或系统剥夺,不可剥夺资源是指当系统把该类资源分配给某个进程时,不能强制收回,只能在该进程使用完成后自动释放 (2)竞争不可剥夺资源:系统中不可剥夺资源的数目不足以满足诸进程运行的要求,则发生在运行进程中,不同的进程因争夺这些资源陷入僵局。 举例说明: 资源A,B; 进程C,D 资源A,B都是不可剥夺资源:一个进程申请了之后,不能强制收回,只能进程结束之后自动释放。内存就是可剥夺资源 进程C申请了资源A,进程D申请了资源B。 接下来C的操作用到资源B,D的资源用到资源A。但是C,D都得不到接下来的资源,那么就引发了死锁。 (3)竞争临时资源 2.进程推进顺序不当发生死锁 ### 三. 产生死锁的四个必要条件? (1)互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源 (2)请求和保持条件:进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此事请求阻塞,但又对自己获得的资源保持不放 (3)不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完后自己释放 (4)环路等待条件:是指进程发生死锁后,必然存在一个进程–资源之间的环形链 ### 四. 处理死锁的基本方法 1.预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件 2.避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁 3.检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉 4.解除死锁:该方法与检测死锁配合使用 ### 五. 实际应用分析 [.net](https://www.jiyuwu.com/Article/ShowArticle/80 ".net") [golang](https://www.jiyuwu.com/Article/ShowArticle/370 "golang")
相关推荐
golang 中解析 tag 是怎么实现的?反射原理是什么?(中高级肯定会问,比较难,需要自己多去总结)
.Net面试题
golang map 使用注意的点,是否并发安全?
uint 类型溢出问题
Golang中defer和return执行的先后顺序
golang中两个变量值的4种交换方式
讲讲 Go 的 select 底层数据结构和一些特性?(难点,没有项目经常可能说不清,面试一般会问你项目中怎么使用select)
http超文本传输协议
Golang空结构体 struct{} 的使用
为 sync.WaitGroup 中Wait函数支持 WaitTimeout 功能.
调用函数传入结构体时,应该传值还是指针? (Golang 都是传值)
.net 10万+大数据处理方式、应用场景
Golang判断slice是否相等
序列化协议
讲讲 Go 的 defer 底层数据结构和一些特性?
golang面试题
go defer,多个 defer 的顺序,defer 在什么时机会修改返回值?
Golang 单引号,双引号,反引号的区别?
B+树为什么快
for range 的时候它的地址会发生变化么?
golang并发题目测试
交替打印数字和字母
机器人坐标问题
数组和切片的区别 (基本必问)
昨天那个在for循环里append元素的同事,今天还在么?
复利计算 递归/非递归
单例模式的应用场景
实现阻塞读且并发安全的map
Redis的优点
在 golang 协程和channel配合使用
Golang表示枚举类型的详细讲解
常见语法题目1
讲讲 Go 的 slice 底层数据结构和一些特性?
MySQL索引原理
详解C#中SqlParameter的作用与用法
写出以下逻辑,要求每秒钟调用一次proc并保证程序不退出?
常见语法题目2
web技术演化
golang 中 make 和 new 的区别?(基本必问)
判断两个给定的字符串排序后是否一致
高并发下的锁与map的读写
redis缓存穿透、缓存击穿、缓存雪崩原因+解决方案
消息队列使用的场景介绍
操作系统基本原理
ElasticSearch使用场景
字符串替换问题
判断字符串中字符是否全都不同
redis在项目中的使用
七道语法找错题目
HTTP协议-HTTP3
翻转字符串
基本数据结构和算法
TiDB使用场景
.net插入日志数据纠错
C#二叉树查找法
面向对象
TCP三次握手和四次挥手
评论区
先去登录
版权所有:机遇屋在线 Copyright © 2021-2025 jiyuwu Co., Ltd.
鲁ICP备16042261号-1