死锁原因,条件和解决

简介: 死锁原因,条件和解决

死锁概念和产生原因


死锁是指多个进程循环等待彼此占有的资源而无限期的僵持等待下去的局面。原因是:


  • 系统提供的资源太少了,远不能满足并发进程对资源的需求

  • 进程推进顺序不合适,互相占有彼此需要的资源,同时请求对方占有的资源,往往是程序设计不合理

死锁产生的必要条件


互斥条件:即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有


可抢占条件:进程所获得的资源在未使用完毕之前,资源申请者不能强行的从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放


占有且等待条件:进程至少已经占有了一个资源,但又申请了一个新的被其他进程所占有的资源,此时处于等待状态


循环等待条件:若干个进程形成环形链,每个都占用对方申请的下一个资源


死锁的处理策略


为使系统不发生死锁,必须设法破坏产生死锁的四个必要条件之一,或者允许死锁产生,但当死锁发生时能检测出思索,并有能力实现恢复。


一般有死锁的预防、死锁避免、死锁的检测与恢复三种方法。


死锁预防:破坏导致死锁必要条件中的任意一个就可以预防死锁。例如,要求用户申请资源时一次性申请所需要的全部资源,这就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。


死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,例如,使用银行家算法。死锁避免算法的执行会增加系统的开销。


死锁检测:死锁预防和避免都是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。


死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将某进程所拥有的资源强行收回,分配给其他的进程。


死锁预防:


打破互斥条件:允许进程同时访问资源(有些资源就是不可以同时访问的,无实用价值)


打破不可抢占条件:比如给进程设置优先级,高优先级的可以抢占资源(实现困难,降低系统性能)


打破占有且等待条件:实行资源预分配策略,即进程在运行前一次性的向系统申请它所需要的全部资源(不可预测资源的使用,利用率低,降低并发性)


破坏循环等待条件:采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出(限制和编号实现困难,增加系统开销,有些资源暂时不用也需要先申请,增加了进程对资源的占用时间)


死锁避免


允许进程动态的申请资源,但系统在进行资源分配前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源你分配给进程,否则,让进程等待。


所谓安全状态,是指系统能按某种进程推进顺序,为每个进程分配其所需的资源,直至满足每个进程对资源的最大需求,是每个进程都可以顺序的完成。此时成P1P2P3…为安全序列,如果系统无法找到一个安全序列,则称系统处于不安全状态。


并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;反之,只要系统处于安全状态,系统便可以避免进入死锁状态。


银行家算法是最著名的死锁避免算法。


死锁解除


资源剥夺法。挂起某些思索进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源时,而处于资源匮乏的状态。


进程撤销法。强制撤销一个或一部分进程并剥夺这些进程的资源。撤销的原则可以按进程的优先级和撤销进程代价的高低进行。


进程回退法。让一个或多个进程回退到足以回避死锁的地步,进程回退时资源释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。

相关文章
|
存储 前端开发 安全
前端开发
前端开发
376 3
|
SQL 存储 算法
TPCC测试究竟意味着什么
最近分布式数据库领域可谓非常之火(也可能是非常之卷),特别的,很多人会关注TPCC的测试结果,也有不少产品会投入很多精力在TPCC的优化上。 我们首先需要搞明白的是,我们从TPCC的测试结果,究竟能得出对这个分布式数据库什么样的评价。
4747 3
|
机器学习/深度学习 人工智能 机器人
计算机视觉技术介绍
【10月更文挑战第14天】 计算机视觉技术介绍
|
存储 人工智能 调度
直播回放 | 高性能智算集群设计思考与实践
本次分享的主题是高性能智算集群设计思考与实践,由阿里云灵骏智算集群产品解决方案负责人丛培岩分享。 1. AGI对基础设施的挑战 2. 高性能智算集群的设计实践 3. 思考与展望
457 1
|
编解码 供应链 搜索推荐
虚拟现实与教育:沉浸式学习的潜力
【10月更文挑战第2天】虚拟现实(VR)技术正在革新教育领域,通过沉浸式体验提升学习效果和兴趣。本文探讨了VR在教育中的应用潜力,特别是在历史、地理、自然科学和语言教育中的案例。虽然面临设备成本和技术支持等挑战,但随着技术进步和成本降低,VR有望成为教育的重要工具,带来更丰富的学习体验。
|
机器学习/深度学习 编解码
mmseg配置解析 contract_dilation=True
`contract_dilation=True` 是 ResNetV1c 中的一种设置,用于解决多层膨胀卷积中的“栅格效应”。通过调整膨胀率,使卷积核在不同阶段更密集地覆盖输入特征图,避免信息丢失,提升特征提取质量,尤其在语义分割任务中效果显著。
370 0
|
机器学习/深度学习 自然语言处理 搜索推荐
通义语音大模型评测:迈向更自然、更智能的语音交互
随着人工智能技术的迅猛发展,语音识别和自然语言处理领域不断涌现出新的模型和应用。阿里云推出的通义语音大模型,正是在这一背景下应运而生。本文将对通义语音大模型进行详细评测,探讨其技术架构、应用场景、性能表现以及未来发展前景。
1829 0
|
关系型数据库 MySQL OLAP
PolarDB +AnalyticDB Zero-ETL :免费同步数据到ADB,享受数据流通新体验
Zero-ETL是阿里云瑶池数据库提供的服务,旨在简化传统ETL流程的复杂性和成本,提高数据实时性。降低数据同步成本,允许用户快速在AnalyticDB中对PolarDB数据进行分析,降低了30%的数据接入成本,提升了60%的建仓效率。 Zero-ETL特性包括免费的PolarDB MySQL联邦分析和PolarDB-X元数据自动同步,提供一体化的事务处理和数据分析,并能整合多个数据源。用户只需简单配置即可实现数据同步和实时分析。
|
中间件 Go
Go语言中的中间件设计与实现
【5月更文挑战第4天】Go语言中的中间件在HTTP请求处理中扮演重要角色,提供了一种插入逻辑层的方式,便于实现日志、认证和限流等功能,而不增加核心代码复杂性。中间件遵循`http.Handler`接口,通过函数组合实现。常见问题包括错误处理(确保中间件能正确处理并传递错误)和请求上下文管理(使用`context.Context`共享数据以避免并发问题)。通过理解中间件机制和最佳实践,可以构建更健壮的Web应用。
436 0