死锁

作者: LMojito | 来源:发表于2018-08-23 10:43 被阅读0次

死锁1

死锁是指两个或两个以上的进程在执行过程中,由于资源竞争或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们都将无法推进下去,此时称系统处于死锁状态,这些永远在互相等待的进程称为死锁进程。


死锁的条件

死锁有三个必要条件:

互斥一次只有一个进程可以使用一个资源,其他进程不能访问其他进程的资源。

占有且等待当一个进程等待其他进程时,继续分配已分配的资源。

不可抢占不能强行抢占已占有的资源

前三个条件都是死锁存在的必要条件而非充分条件,要产生死锁,还需第四个条件:

循环等待存在一个闭合的进程链,每个进程至少占有此链中下一个进程所需的一个资源

第四个条件实际上是前三条件的潜在结果,即假设前三个条件存在,那么可能发生的一系列事件会导致不可解的循环等待。 这个不可解的循环等待实际上就是死锁的定义。因此这四个条件一起构成了死锁的充分必要条件。

其中,循环等待与其他三个条件存在本质上的区别。前三个条件是策略条件,而循环等待则取决于所涉及的进程请求和释放资源的顺序。


死锁预防

死锁预防的策略是师徒设计一种系统来排除发生死锁的可能性 方法分为两类, 间接死锁预防方法,即防止前三个必要条件中的任何一个条件发生。另一种是直接预防方法,即防止循环等待发生

1.互斥  一般来说这个条件是不可避免的。如果需要对资源进行互斥访问,那么操作系统就必须支持互斥。若资源或文件可能允许多个读访问,但只能允许互斥的写访问,若此时多个进程请求写权限,则可能发生死锁

2.占有且等待 可以要求进程一次性的请求所有需要的资源,并阻塞这个进程知道所有请求都满足。这种方法有低效性

3.不可抢占 首先某些资源的一个进程进一步申请资源时若被拒绝,则该进程必须释放其最初占有的资源,必要时可以再次申请这些资源和其他资源  其次,若一个进程请求一个被另一个进程占有的资源时 ,操作系统可抢占另一个进程,要求其释放资源,这个操作只能在两个进程优先级不同的条件下才能预防死锁。

4.循环等待 循环等待条件可以通过定义资源类型的线性顺序来预防


死锁的避免 

死锁的避免与死锁的预防相比,可允许更多的并发。在死锁的避免中,是否允许当前的资源分配请求是通过判断请求是否可能导致死锁来决定的。因此死锁避免需要知道未来进程资源请求的情况。

两种死锁避免的方法:

若一个进程的请求会导致死锁 ,则不启动该进程。

若一个进程增加的资源请求会导致死锁,则不允许这一资源分配

相关文章

  • 死锁

    线程饥饿死锁 锁顺序死锁 动态锁顺序死锁通过锁顺序来避免死锁 避免死锁

  • 死锁

    第11章:死锁和进程通信 死锁概念 死锁处理方法 死锁预防(Deadlock Prevention) 死锁避免(D...

  • java多线程笔记

    产生死锁的四个必要条件 处理死锁的基本方法 死锁预防 死锁避免 死锁检测 死锁解除 https://blog.cs...

  • [现代操作系统]--死锁

    table of content 死锁定义 死锁建模-- 资源分配图 处理死锁鸵鸟算法检测并恢复死锁检测死锁恢复利...

  • Java-多线程(四)死锁

    死锁 死锁示例

  • Java死锁

    什么是死锁 死锁检测 产生死锁的四个必要条件 如何避免死锁 死锁 死锁,指两个或多个线程之间,由于互相持有对方需要...

  • java并发--java死锁

    本篇结构: 前言 什么是死锁 产生死锁的必要条件 死锁的代码示例 死锁排查 如何避免死锁 总结 一、前言 今天被问...

  • Java多线程之死锁(Deadlock)及死锁避免(Deadlo

    线程死锁(Thread Deadlock) 数据库死锁(Database Deadlocks) 死锁避免 (Dea...

  • JavaEE面试题总结 Day39 2018-12-29

    什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要...

  • Java并发之嵌套管程锁死(Nested Monitor Loc

    嵌套管程死锁是如何发生的 具体的嵌套管程死锁的例子 嵌套管程死锁 vs 死锁 嵌套管程锁死类似于死锁, 下面是一个...

网友评论

      本文标题:死锁

      本文链接:https://www.haomeiwen.com/subject/fxspiftx.html