• 产生死锁的原因主要是
    (1) 因为系统资源不足。
    (2) 进程运行推进的顺序不合适。
    (3) 资源分配不当等。
    如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
    就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

  • 产生死锁的四个必要条件:
    死锁的4个必要条件:
    (1)互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
    (2)请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
    (3)非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
    (4)循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。

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

  • 死锁的解除与预防:

     1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。

        为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
     2.检测死锁并且恢复。
     3.仔细地对资源进行动态分配,以避免死锁。
     4.通过破除死锁四个必要条件之一,来防止死锁产生。

        理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
    解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
    定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
    的情况下占用资源。因此,对资源的分配要给予合理的规划。

  • 解决死锁问题的策略

    1、条件一:互斥条件

    条件一念一否定的,因为资源的互斥性是由其自身的性质决定的。但是可以采用虚拟设备技术排   除非共享设备死锁的可能。

    2、条件二:不剥夺条件

    很难实现。系统一般让资源占有者自己主动释放资源,而不是采用抢占的方式。

    3、条件三:占有并等待

    在资源分配策略上可以采取静态的一次性资源分配的方法来保证死锁不可能发生,这是一种很保守   的静态预防死锁的方法,但是资源利用率低下。

    4、条件四:环路条件

    在进行资源分配前检查是否会出现环路,预测是否可能发生死锁,只要有这种可能就不予以分配。   即采用动态分配资源的方法。

    总结来看解决死锁的策略有以下几个:

    1、采用资源静态分配方法预防死锁。

    2、采用资源动态分配、有效的控制分配方法来避免死锁。

    3、当死锁发生时检测出死锁,并设法修复。

死锁产生的原因&&必要条件&&如何避免死锁_死锁