zoukankan      html  css  js  c++  java
  • 什么是死锁

    什么是死锁

    死锁的概念

    (一)死锁是两个或两个以上的进程中的每一个都在等待其中的其它进程释放资源而被封锁,它们都无法向前推进,陷入永久等待状态,这种现象称为死锁。

    (二)特点

    1、占有一定的资源,等待对方释放资源。

    2、获得对方资源前不释放自己占有的资源。

    (三)比较

    死锁:一组进程都不能执行(向前推进)。

    死循环:进程一直执行,永远不结束。

    死机:系统中的所有进程都不能执行(向前推进)。

    二、死锁的起因

    1、资源有限

    系统提供的资源数少于并发进程所需要的资源数。

    2、资源竞争

    进程的并发性造成对资源的竞争使用。

    注:一般我们不可能为所要求资源的进程无限制地提供资源。

    三、关于死锁的进一步说明

    (一)死锁是进程之间的一种特殊关系,是由资源竞争引起的僵局关系,因此,当我们提到死锁时,至少涉及到两个进程。虽然单个进程也可能锁住自己,但那是程序设计错误而不是死锁。

    (二)当出现死锁时,首先要弄清楚被锁的是哪些进程,因竞争哪些资源被锁。

    (三)在多数情况下,系统出现死锁,是指系统内的一些而不是全部进程被锁,它们是因竞争某些而不是全部资源而进入死锁的,若系统的全部进程都被锁住,我们称系统处于瘫痪状态(死机)。

    (四)系统瘫痪意味着所有进程都进入了睡眠(阻塞)状态,如果其中至少有一个进程可由I/O中断唤醒的话,这并不一定就是瘫痪状态。

    四、产生死锁的必要条件

    (一)互斥条件

    在一段时间内,一个资源只能由一个进程独占使用,若别的进程也要求该资源,则须等待直至其占用者释放——资源的互斥使用。

    (二)部分分配

    进程每次申请它所需资源的一部分,在申请分配或等待新资源的同时继续占有已分配的资源。

    (三)不剥夺条件

    进程所获得的资源在未使用完之前,不能被其它进程强行夺走,而只能由获得资源的进程自己释放。

    (四)环路条件

    存在一个等待资源的进程循环链,链中的每个进程所获得的资源是下一个进程申请(等待)的资源。

    显然,上述条件中的任意一个不满足,死锁就不会发生。

    五、死锁的表示

    死锁可以用有向图来表示,有向图形成环路则形成死锁。例如,有P1,P2两个进程,共享一台打印机资源R1和一台输入机R2,在工作使用时,共享资源被独占。

    六、死锁定理

    (一)如果不出现任何环,则此时系统内不存在死锁。

    (二)如果出现了环,且处于此环中的每类资源均只有一个实体时,则有环就出现死锁,此时,环是系统存在死锁的充分必要条件。

    (三)如果系统资源分配图中出现了环,但处于此环中的每类资源的个数不全为1,则环的存在只是产生死锁的必要条件而不是充分条件。

  • 相关阅读:
    CSU1090 数字转换问题[BFS+素数筛选]
    HDOJ2083 简易版之最短距离
    HOJ11525 Matchsticks
    HDOJ1058 Humble Numbers[DP]
    Sort函数进行升序和降序排列[#include <algorithm>]
    HDOJ1018 求N!的位数[斯特林公式处理阶乘及阶乘位数的问题]
    HDOJ1597 find the nth digit[一元二次方程求解]
    HOJ10641 Equidivisions [BFS]
    HOJ10814 Wooden Sticks[线性DP求最少不递增子序列+结构体排序]
    HOJ12363 Robots on a grid [DP+BFS()]
  • 原文地址:https://www.cnblogs.com/0822vaj/p/3548871.html
Copyright © 2011-2022 走看看