`
hepeng1688
  • 浏览: 92686 次
  • 来自: ...
社区版块
存档分类
最新评论

造成死锁的原因和解决方案

    博客分类:
  • java
阅读更多

计算机系统中,如果系统的资源分配策略不当,更常见的可能是程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。

产生死锁的原因主要是:

(1) 因为系统资源不足。

(2) 进程运行推进的顺序不合适。

(3) 资源分配不当等。

       如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

产生死锁的四个必要条件:

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

       这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

死锁的解除与预防:

        理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。

       此外,也要防止进程在处于等待状态的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配 。因此,对资源的分配要给予合理的规划。

分享到:
评论

相关推荐

    SQL Server死锁产生的原因及解决办法

    本文举例说明SQL Server死锁产生的原因,并提出了解决的办法。

    MySQL死锁的产生原因以及解决方案

    在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁...

    Python 防止死锁的方法

    解决方案 在多线程程序中,死锁问题很大一部分是由于线程同时获取多个锁造成的。举个例子:一个线程获取了第一个锁,然后在获取第二个锁的 时候发生阻塞,那么这个线程就可能阻塞其他线程的执行,从而导致整个程序...

    go语言开发技巧入门教程总结.docx

    解决方案:优化GC配置,减少不必要的对象分配,适时手动释放资源,监控和调整GC策略。 内存泄漏 问题描述:即使有GC,但如果长时间持有对不再使用的内存引用,也可能造成内存泄漏。 示例代码: Go for { s := make...

    OS_synchtest:操作系统同步任务

    在Linux内核上构建Harvard os / 161的教育性os之后,对os161内进行测试的功能进行了修改,以在32辆车的四向交叉路口中造成死锁并解决了问题。 具体的问题情况是假定NE,SE,SW和NW的每个象限都有交叉点,然后打印出...

    王者荣耀java源码-TechnicalArticles:技术文章

    饿了么hotkey解决方案 IO 流程图及代码理解多路IO复用 IO 多路IO复用基础知识 IO 安全 多线程 父子任务使用同一线程池造成死锁 JVM 讨论垃圾回收器ZGC 架构 数据库业务设计 大数据 小米HDFS设计 大数据 分析数据增长...

    SQLServer安全及性能优化

    SQLServer安全及性能优化 修补漏洞 安装程序补丁修补漏洞 随时关注微软官方网站补丁...解决方案: 1、大批量导入数据的时候设置数据库的恢复模式为“大容量日志恢复模式” 2、导入前禁用索引,导入完毕后重建索引。

    数据库系统管理制度V1.0.doc

    需求调研:由数据库管理员根据数据库运行监控过程中发现的问题进行调研,确 定问题解决方案。 2.需求评审:由数据库管理员组织调研,由部门经理确定后,完成对变更需求的分 析评审。 3.变更申请:由数据库管理员...

    数据库系统管理制度V1.0(1).doc

    需求调研:由数据库管理员根据数据库运行监控过程中发现的问题进行调研,确 定问题解决方案。 2.需求评审:由数据库管理员组织调研,由部门经理确定后,完成对变更需求的分 析评审。 3.变更申请:由数据库管理员...

    php多用户读写文件冲突的解决办法

    一般的方案会是:复制代码 代码如下:$fp = fopen(...在多并发情况下,似乎是经常独占资源,不即时释放,或者是根本不释放,造成死锁,从而使服务器的cpu占用很高,甚至有时候会让服务器彻底死掉。好像在很多li

    0x00000000内存不能为read修复工具

    该内存不能为“read”或“written解决方案 运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。 “0x????????”指令引用的“0x????????”内存。该内存不能为“read”。 “0x????????”指令引用的...

    asp.net知识库

    常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用...

    ORACLE数据库智能化管理系统2012

    数据库状态及运行情况综合查看,使您了解ORACLE运行状况及空间、日志归档、数据文件等使用情况更直观,并可智能生成数据库热备份脚本和备份恢复方案,为您的数据库保驾护航,使您高枕无忧。 本系统可执行SQL分组语句后...

    游戏画面就弹出内存不能为read修复工具

    该内存不能为read或written的解决方案关键词: 该内存不能为"read" 该内存不能为"written" 从网上搜索来的几篇相关文章. 【文章一】 使用Windows操作系统的人有时会遇到这样的错误信息: 「“0X????????”指令...

    超级有影响力霸气的Java面试题大全文档

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java....

    java 面试题 总结

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang....

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...

Global site tag (gtag.js) - Google Analytics