zoukankan      html  css  js  c++  java
  • 关于死锁的简单知识

    计算机中的独占性资源,在任意时刻它们只能被一个进程使用,比如磁带,打印机等。为了避免工作混乱,操作系统可以授权一个进程临时排斥其他进程访问某种资源的能力。这样一来,死锁问题也随之产生。死锁可能发生在进程之间,机器之间,数据库系统中。

    大部分死锁都与资源相关。资源分为可抢占式资源和不可抢占式资源,一般来说,可抢占式资源发生死锁的概率较低。


    资源死锁的4个必要条件:

    1)互斥条件:指进程对所分配到的资源进行排它性使用,每个资源要么是分配给一个进程,要么是可用的。

    2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

    3)不可抢占条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

    4)环路等待条件:指在发生死锁时,必然存在一个进程-资源的环形链,每个进程都在等待下一个进程的资源。

    死锁发生时,这四个条件一定是同时满足的,如果任何一个不成立,死锁就不会发生。

    对于基础的情况,我们可以通过资源分配图来判断有没有发生死锁,只需要按照请求和释放的次序一步步进行,每一步之后都检查是否包含了环路,如果有环路,就有死锁,反之,就没有。

    而处理死锁,有以下几种方法:

    1)死锁检测和恢复  在这种情况下,系统并不阻止死锁的发生,先是允许死锁,在检测到死锁发生后,采取措施进行恢复。

      可以利用抢占恢复,回滚恢复,还可以通过杀死进程来恢复,可能代价也比较大。

    2)仔细对资源进行分配,动态的避免死锁。

      有一个2进程避免死锁的资源轨迹图,避开阴影部分;还有著名的银行家算法。

    3)通过破坏引起死锁的4个条件之一,防止死锁产生。

      破坏互斥条件:尽量少分配那些不是绝对必须的资源

      破坏请求和保持条件:规定进程在开始前请求所需的全部资源。此方法目前认为是最好的。

      破坏不可抢占条件:对一些资源进行合理的虚拟化,使用面较窄。

      破坏环路等待条件;对资源按照顺序编号。

  • 相关阅读:
    CSS書寫規範及CSS Hack
    C#中为什么不能再方法里定义静态变量(Static)
    本机操作Excel文件提示错误:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
    C#中静态变量和 静态方法的作用
    C#静态构造函数和非静态构造函数
    C# 判断字符串为空的4种方法及效率
    ASP.NET反射
    C#排序1(冒泡排序、直接排序、快速排序)
    javascript、jquery 、C#、sqlserveer、mysql、oracle中字符串截取的区别和用法
    MySQL数据库不识别server=.而是识别localhost
  • 原文地址:https://www.cnblogs.com/kekoukele987/p/7406793.html
Copyright © 2011-2022 走看看