死锁
来源:互联网 发布:并发编程实战豆瓣 编辑:程序博客网 时间:2024/06/08 00:50
指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象
死锁发生的基本条件:
- mutual exclusion 互斥
- hold and wait 保持而且等待
- no preemption 不能抢占
- circular wait 循环等待
没环一定没死锁
有环可能有死锁
有环但是没死锁
所以,没环一定没死锁,有环可能有死锁
死锁解决策略
- 鸵鸟算法
死锁就当没看见,死锁是由程序开发人员造成的,应该有开发人员来自行解决,操作系统不管。 turn nonsharable to sharable(将资源共享):
因为死锁就是相互在竞争同一个资源,所以将资源变成可共享的可以解决死锁问题- time-sharing 分时
- virtual-combination 虚拟合并
例如同时开两个音乐播放器,但事实上只能有一个进程拥有声卡这个资源,可以对其进行读写,所以如果没有虚拟合并的话,两首歌是不能同时播放的;虚拟就是为进程在内存中虚拟出一个声卡来,进程将数据写在内存中,然后由混音器将两个虚拟声卡中的数据运算成一种类似叠加的数据,然后输送到真实的声卡进行播放。
- spooling 缓冲池
应用于串行设备,例如打印机
当一个进程请求锁资源的时候判断一下,当分配给它时,会不会出现死锁。
判断依据是,系统将所有请求该资源的进程进行一个排序,排序后的进程能够依次对该资源进行访问而且不发生死锁。
这是安全状态
这是不安全状态实现:资源分配图和银行家算法
资源分配图
假设系统请求资源后,判断是否会出现环,如果有环那么就是不安全的,如果没环那么就是安全的。银行家算法:
找出能够满足所有进程请求的一种状态就可以
阅读全文
0 0
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- Android Studio3.0开发JNI流程------JNI接口函数和指针
- Spring Framework 5.0.2 document 翻译-Over View
- python学习笔记 第五章
- Sublime Text 3 -mac简体中文汉化包下载及教程
- listview的简单使用
- 死锁
- mysql5.7 sql_mode=only_full_group_by研读
- OpenATS续篇:搭建自己的卫星地球站
- Github干货系列:C++资源集合
- JVM-zero:是否需要进行GC调优
- Android中的MVP模式讲解及实践
- 关于服务器只允许特定IP访问问题的设置-Windows server 2003、2008、2012
- Android Studio找到当前类方法的快捷键
- Android指纹对称加密及登录功能的实现