? ? ? ?

? ? ? ? "死鎖"是計(jì)算機(jī)操作系統(tǒng)中的一個(gè)專業(yè)名詞,百度百科是這樣對(duì)它進(jìn)行解釋的:“死鎖是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過程中,由于競(jìng)爭(zhēng)資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。”系統(tǒng)在運(yùn)行的過程中會(huì)發(fā)生正?;蛘叻钦5臓顟B(tài),而今天所談到的“死鎖問題”正是一種非正常的狀態(tài),一旦發(fā)生死鎖在沒有外力推動(dòng)的情況下就無法進(jìn)行下去了。? ? ?
? ? ? ? 死鎖同樣可以類比于我們?cè)诠ぷ鲗W(xué)習(xí)和生活中遇到的各種問題,事件本身為進(jìn)程,在推進(jìn)的過程中由于資源競(jìng)爭(zhēng)或者進(jìn)程間推動(dòng)順序不當(dāng)引起死鎖,這個(gè)時(shí)候我們困在其中無法自救,進(jìn)程所需要的資源就是我們急需請(qǐng)求的外援幫助。而外援這個(gè)資源從哪里來?? ? ?
? ? ? ? 如何解決死鎖?? ? ?

? ? ? ? 五個(gè)辦法:預(yù)防死鎖、避免死鎖、檢測(cè)死鎖、解除死鎖、鴕鳥算法。前兩個(gè)都是都是事先預(yù)防的策略,中間兩個(gè)是正面解決的辦法,最后一個(gè)是最常采用的辦法,后面詳談。談解決辦法,先了解一下死鎖產(chǎn)生的四個(gè)必要條件,如下圖:? ? ?

? ? ? ? 預(yù)防死鎖是精細(xì)策略,事先破壞四個(gè)必要條件中的一個(gè)或幾個(gè),讓死鎖狀態(tài)根本沒辦法發(fā)生。正如人生一般,將各種可能發(fā)生的危險(xiǎn)因素掐死在搖籃里,這也需要人有極強(qiáng)的預(yù)見力和執(zhí)行力。? ? ?
? ? ? ? 避免死鎖是范圍性的策略,事先預(yù)防系統(tǒng)進(jìn)入不安全的狀態(tài)從而規(guī)避死鎖。將未來的路大致劃分為安全區(qū)和危險(xiǎn)區(qū),一直走在安全區(qū)的中心,連危險(xiǎn)區(qū)的外圍都不去碰觸,這需要我們克制住自己對(duì)一切未知的好奇心并嚴(yán)格執(zhí)行。? ? ?
? ? ? ? 但以上兩種策略過于小心翼翼,難免過分緊繃。而后面的兩種正面解決的辦法肯定更為大氣,不做任何事先措施,允許死鎖的發(fā)生。前者是精準(zhǔn)定位與死鎖有關(guān)的進(jìn)程和資源,立即清除這些壞死部分,一時(shí)的疼痛換來長(zhǎng)期的穩(wěn)定。這個(gè)辦法物無疑是殘暴而簡(jiǎn)單的,揮劍斬情絲必定是強(qiáng)者所為。后者的方式更為溫柔,撤銷或者掛起一些進(jìn)程以求釋放一些資源,緩慢得對(duì)癥下藥,慢慢來總會(huì)藥到病除讓整個(gè)系統(tǒng)重新活過來。? ?
? ? ? ? 最后的鴕鳥算法是實(shí)現(xiàn)度最高的一種辦法。傳說中鴕鳥看到危險(xiǎn)就把頭埋在地底下。當(dāng)你對(duì)某一件事情沒有一個(gè)很好的解決方法時(shí),那就忽略它,就像鴕鳥面對(duì)危險(xiǎn)時(shí)會(huì)把它深埋在沙礫中,裝作看不到。這樣的算法稱為“鴕鳥算法“。這實(shí)在不算是一個(gè)算法,但卻是目前實(shí)際系統(tǒng)采用最多的一種策略。即是“手動(dòng)干預(yù)—重新啟動(dòng)”。這可能在生活中也是應(yīng)用最廣泛的一種策略了。無論時(shí)間抑或新歡,都是記憶重啟的承載。? ? ?
? ? ? 允許路上發(fā)生死鎖,也允許暫時(shí)的困苦不前,允許生活的非正常狀態(tài)發(fā)生畢竟對(duì)于單個(gè)樣本來說它和正常狀態(tài)發(fā)生的概率相等并不可預(yù)測(cè),就像“薛定諤的貓”。關(guān)鍵在于能不能重新處理好進(jìn)程和資源整個(gè)系統(tǒng)活過來,讓自己,活過來。愿各位迷茫困苦的死鎖進(jìn)程中的人們重新振奮,讓系統(tǒng)活過來,讓自己走出來。安好!