死锁
廖家龙 用心听,不照做

什么是死锁:在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。发生死锁后若无外力干涉,这些进程都将无法向前推进

进程死锁、饥饿、死循环的区别:

  • 死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象

  • 饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象

  • 死循环:某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑bug导致的,有时是程序员故意设计的

死锁产生的四个必要条件:(有一个条件不成立,则不会产生死锁)

  • 互斥条件:一个资源一次只能被一个进程使用
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放
  • 不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺
  • 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系,发生死锁时一定有循环等待,但是发生循环等待时未必死锁

死锁的处理策略:

  1. 预防死锁(静态策略,不允许死锁发生):破坏死锁产生的四个必要条件中的一个或几个
  2. 避免死锁(动态策略,不允许死锁发生):用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
  3. 死锁的检测和解除:允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁
  4. 忽略该问题,例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下