首页 > 其他分享 >产生死锁的必要条件?怎样预防和避免死锁?

产生死锁的必要条件?怎样预防和避免死锁?

时间:2023-09-27 16:35:32浏览次数:32  
标签:死锁 必要条件 剥夺 进程 银行家 预防 资源 资源分配

文章转载链接http://www.51testing.com/html/15/n-4481115.html

1.什么是死锁?

当多个进程在运行过程中因为争夺资源而造成的一种僵局,当进程处于这种僵持状态的时候,若无外力作用,它们将永远无法向前推进.这种状态就称为死锁。

2.产生死锁的必要条件

产生死锁总共有4个必要条件:

·资源互斥:当一个资源被一个进程使用时候,其他继承不能使用该资源

·资源不可剥夺:进程已持有的资源在使用完之前是不可被剥夺的,只能在使用完后由自己释放

·请求和保持:当进程在请求其他资源的时候,对自己已持有的资源保持不放

·循环等待:即存在一个等待队列:例如:A占有B的资源,B占有C的资源,C占有A的资源,这样就形成了一个等待环路

当以上4个条件同时成立的时候,就会产生死锁。

3.预防死锁的方法

资源一次性分配(破坏请求条件):一次性分配所有的资源,这样就不会再有请求了。

(破坏保持条件):一个进程只要有一个资源得不到分配,就也不给这个进程分配其他资源。

可剥夺资源(破坏不可剥夺性):一个进程即使获得了部分资源,但是如果得不到其他资源,就需要释放掉已有的资源。

资源有序分配(破坏循环等待):系统为每类资源分配一个编号,每一个进程按照编号以递增的顺序请求资源,释放则相反。

4.避免死锁的方法

预防死锁的四种方法,都会严重的影响系统性能.因此可以尽可能去避免死锁的产生。

在避免死锁的策略中,允许进程动态地申请资源.所以,系统在进行资源分配的时候,会预先计算资源分配的安全性,如果此次资源分配不会导致系统进入不安全的状态,就将资源分配给进程,否则,进程等待。

避免死锁的方法中最经典和最重要的就是:银行家算法。

原理:

将操作系统视为一个银行家,将操作系统所管理的资源视为银行家的资金,进程申请资源就视为用户向银行家贷款。

当一个顾客对资金的最大需求量不超过银行家现有的资金时,就可以接纳该顾客。

顾客可以分期贷款,但是贷款的总额不可以超过最大需求量。

当银行家现有资金不能满足用户尚需的贷款金额时,可以推迟支付贷款,但是使顾客在有限的时间内拿到贷款。

当顾客得到所有所需资金后,一定可以在有限时间内归还所有的资金。

5.解除死锁的方法

剥夺资源:从其他进程剥夺足够数量的资源给死锁,用以解除死锁状态。

撤销进程:撤销系统中一个或者多个死锁进程。


标签:死锁,必要条件,剥夺,进程,银行家,预防,资源,资源分配
From: https://blog.51cto.com/u_15005235/7626296

相关文章

  • 亚信科技AntDB数据库 高并发、低延迟、无死锁,深入了解AntDB-M元数据锁的实现
    AntDB-M在架构上分为两层,服务层和存储引擎层。元数据的并发管理集中在服务层,数据的存储访问在存储引擎层。为了保证DDL操作与DML操作之间的一致性,引入了元数据锁(MDL)。AntDB-M提供了丰富的元数据锁功能,然而高并发锁操作很容易出现锁竞争、等待、死锁的问题,AntDB-M具体提供了什么样......
  • MySQL事务死锁问题排查
    一、背景在预发环境中,由消息驱动最终触发执行事务来写库存,但是导致MySQL发生死锁,写库存失败。com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:rpcerror:code=Aborteddesc=Deadlockfoundwhentryingtogetlock;tryrestartingtransaction(er......
  • 多通道振弦数据记录仪在预防地质灾害中的重要性
    多通道振弦数据记录仪在预防地质灾害中的重要性地质灾害是指在地表或岩体内部发生的、由地质原因引起的、对人类生命、财产和环境安全造成威胁或损害的各种灾害。地质灾害的预测和预防对于保障人民生命财产安全、维护社会稳定和可持续发展具有重要的意义。而多通道振弦数据记录仪......
  • 什么是死锁?
    什么是死锁?当线程A持有独占锁a,并尝试去获取独占锁b的同时,线程B持有独占锁b,并尝试获取独占锁a的情况下,就会发生AB两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。产生死锁的条件是什么?怎么防止死锁?产生死锁的必要条件: 复制代码1、互......
  • 深入探讨Java面试中内存泄漏:如何识别、预防和解决
    引言在编写和维护Java应用程序时,内存泄漏是一个重要的问题,可能导致性能下降和不稳定性。本文将介绍内存泄漏的概念,为什么它在Java应用程序中如此重要,并明确本文的目标,即识别、预防和解决内存泄漏问题。内存泄漏的概念内存泄漏是指应用程序中分配的内存(通常是堆内存)在不再需要时......
  • 记一个mysql死锁问题,在并发情况下导致的数据库更新超时
    1、问题:在执行mysql数据库更新操作,根据条件更新其中一列的值,具体的更新语句类似如下:updatepeoplesetname='zhangsan'whereid=1a andage=24;但是在Java中使用parallelStream().foreach(a->{//sql更新操作})并发流就会出现问题,导致有的更新会失败,报如下错误:M......
  • 个人如何预防钓鱼邮件
    个人PC预防钓鱼邮件的措施如下: 培养安全意识:了解钓鱼邮件的特征和常见手法,学习如何识别和应对钓鱼邮件。可以通过参加网络安全培训、阅读相关文章和参考安全机构的建议来提高自己的安全意识。 警惕邮件发送者:仔细检查邮件的发送者,特别是陌生的或不熟悉的发送者。注意检查发送......
  • Java多线程____线程死锁例子
    1:两个任务以相反的顺序申请两个锁,死锁就可能出现2:线程T1获得锁L1,线程T2获得锁L2,然后T1申请获得锁L2,同时T2申请获得锁L1,此时两个线程将要永久阻塞,死锁出现packagecom.zs.test; publicclassDeadLock{ publicstaticStringobjA="objA"; publicstaticStringobjB="ob......
  • 预防重复提交的开关
    这一段代码用于防止数据重复提交,如果repeatSubmit为false,那么就可以重复提交(默认是打开“不准重复提交”)来测这一段代码是后来加上的发现没有了限制,想交就交好了,测完了,记得把代码删了......
  • 基于JAVA的儿童预防接种预约微信小程序
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了儿童预防接种预约微信小程序的开发全过程。通过分析医院挂号信息管理的不足,创建了一个计算机管理医院挂号信息的方案。文章介绍了儿童预防接种预约微信小程序的系统分析部分,包括可行性......