什么是死锁,如何避免死锁?

10 分钟阅读 1195 字 + 508 词
参考答案:
死锁产生的原因
  1. 系统资源的竞争 系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。
  2. 进程运行推进顺序不合适 进程在运行过程中,请求和释放资源的顺序不当,会导致死锁
死锁是系统中两个或多个进程在执行过程中,因争夺资源而造成的一种僵局 。当每个进程 都持有一定的资源并等待其他进程释放它们所需的资源时,如果这些资源都被其他进程占有且不释放,就导致了死锁。
死锁只有 同时 满足以下四个条件才会发生:
  • 互斥条件 :一个进程占用了某个资源时,其他进程无法同时占用该资源。
  • 请求保持条件 :一个进程因为请求资源而阻塞的时候,不会释放自己的资源。
  • 不可剥夺条件 :资源不能被强制性地从一个进程中剥夺,只能由持有者自愿释放。
  • 循环等待条件 :多个进程之间形成一个循环等待资源的链,每个进程都在等待下一个进程所占有的资源。
避免死锁: 通过破坏死锁的四个必要条件之一来预防死锁。比如破坏循环等待条件,让所有进程按照相同的顺序请求资源。 检测死锁:通过检测系统中的资源分配情况来判断是否存在死锁。例如,可以使用资源分配图或 银行家算法 进行 检测 。 解除死锁:一旦检测到死锁存在,可以采取一些措施来解除死锁。例如,可以通过抢占资源、终止某些进程或进行资源回收等方式来解除死锁。
总结:
死锁是系统中两个或多个线程在执行过程中,因争夺资源而造成的一种僵局 。当每个线程 都持有一定的资源并等待其他线程释放它们所需的资源时,如果这些资源都被其他线程占有且不释放,就导致了死锁。
死锁只有 同时 满足以下四个条件才会发生:
  • 互斥条件 :一个进程占用了某个资源时,其他进程无法同时占用该资源。
  • 请求保持条件 :一个进程 因为请求资源而阻塞 的时候, 不会释放自己的资源
  • 不可剥夺条件 资源不能被强制性地从一个进程中剥夺,只能由持有者自愿释放
  • 循环等待条件 多个进程之间形成一个循环等待资源的链,每个进程都在等待下一个进程所占有的资源
避免死锁: 通过破坏死锁的四个必要条件之一来预防死锁。比如破坏循环等待条件,让所有进程按照相同的顺序请求资源。 检测死锁:通过检测系统中的资源分配情况来判断是否存在死锁。例如,可以使用资源分配图或银行家算法进行检测。 解除死锁:一旦检测到死锁存在,可以采取一些措施来解除死锁。例如,可以通过抢占资源、终止某些进程或进行资源回收等方式来解除死锁。
首先如果要解除死锁的话基本上只能通过终止进程或者进行资源回收的方式来解除死锁,很难人为干预,所以说我们最好是避免死锁。说到死锁的四个条件,互斥条件本来是解决线程安全的,所以说不用去考虑通过去改变互斥条件来避免死锁了。所以说我们需要从 请求保持条件,不可剥夺条件,循环等待条件 这三个条件来避免。
对于请求保持条件, 我们可以一次性去申请需要的所有资源 ,这样就不存在等待的问题了。
对于不可剥夺条件, 就是使线程如果申请不到其他资源的时候,就主动释放掉自己的已经占有的资源
对于循环等待条件呢, 我们可以按顺序去申请资源,这样就不会出现循环等待问题了。每个进程只能按递增顺序申请资源 因此每个时刻总有一个进程占据了较高序号的资源,那么它后面继续申请的资源一定是空闲的,这就保证了进程是可以一直向前推进的