"死锁"是计算机操作系统中的一个专业名词,百度百科是这样对它进行解释的:“死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。”系统在运行的过程中会发生正常或者非正常的状态,而今天所谈到的“死锁问题”正是一种非正常的状态,一旦发生死锁在没有外力推动的情况下就无法进行下去了。
死锁同样可以类比于我们在工作学习和生活中遇到的各种问题,事件本身为进程,在推进的过程中由于资源竞争或者进程间推动顺序不当引起死锁,这个时候我们困在其中无法自救,进程所需要的资源就是我们急需请求的外援帮助。而外援这个资源从哪里来?
如何解决死锁?
五个办法:预防死锁、避免死锁、检测死锁、解除死锁、鸵鸟算法。前两个都是都是事先预防的策略,中间两个是正面解决的办法,最后一个是最常采用的办法,后面详谈。谈解决办法,先了解一下死锁产生的四个必要条件,如下图:
预防死锁是精细策略,事先破坏四个必要条件中的一个或几个,让死锁状态根本没办法发生。正如人生一般,将各种可能发生的危险因素掐死在摇篮里,这也需要人有极强的预见力和执行力。
避免死锁是范围性的策略,事先预防系统进入不安全的状态从而规避死锁。将未来的路大致划分为安全区和危险区,一直走在安全区的中心,连危险区的外围都不去碰触,这需要我们克制住自己对一切未知的好奇心并严格执行。
但以上两种策略过于小心翼翼,难免过分紧绷。而后面的两种正面解决的办法肯定更为大气,不做任何事先措施,允许死锁的发生。前者是精准定位与死锁有关的进程和资源,立即清除这些坏死部分,一时的疼痛换来长期的稳定。这个办法物无疑是残暴而简单的,挥剑斩情丝必定是强者所为。后者的方式更为温柔,撤销或者挂起一些进程以求释放一些资源,缓慢得对症下药,慢慢来总会药到病除让整个系统重新活过来。
最后的鸵鸟算法是实现度最高的一种办法。传说中鸵鸟看到危险就把头埋在地底下。当你对某一件事情没有一个很好的解决方法时,那就忽略它,就像鸵鸟面对危险时会把它深埋在沙砾中,装作看不到。这样的算法称为“鸵鸟算法“。这实在不算是一个算法,但却是目前实际系统采用最多的一种策略。即是“手动干预—重新启动”。这可能在生活中也是应用最广泛的一种策略了。无论时间抑或新欢,都是记忆重启的承载。
允许路上发生死锁,也允许暂时的困苦不前,允许生活的非正常状态发生毕竟对于单个样本来说它和正常状态发生的概率相等并不可预测,就像“薛定谔的猫”。关键在于能不能重新处理好进程和资源整个系统活过来,让自己,活过来。愿各位迷茫困苦的死锁进程中的人们重新振奋,让系统活过来,让自己走出来。安好!