多數(shù)電腦死機的時候,線程正在等待那個注定不會到來的解鎖。早些年電腦性能不夠強,多開幾個程序就可能卡死電腦,組合鍵按爛也調(diào)不出任務管理器,只能含淚長按電源按鈕。
那么這種死機發(fā)生時,電腦在干啥呢?
作為計算機的核心,CPU的工作就是不斷取出一條條指令執(zhí)行。如果CPU被困在某個地方出不來,導致無法繼續(xù)執(zhí)行其他操作就是我們說的軟件導致死機。
當然隨便寫個死循環(huán)代碼是困不住CPU的,因為操作系統(tǒng)會用“中斷”讓CPU停下來,運行其他的線程。而且多核CPU可以同時運行多個線程,一個死循環(huán)也沒法讓其他核心陷入死機。
真實的死機一般有兩種原因。一是出問題的是高優(yōu)先級的全局性中斷,Windows 操作系統(tǒng)內(nèi)核中,有大量的高優(yōu)先級全局性的鎖,如果它們出問題一般的中斷是無法把執(zhí)行權搶回去的,這就會表現(xiàn)為死機。二是中斷能搶到 CPU,但發(fā)現(xiàn)沒有線程可以調(diào)度。一般這時候能調(diào)度的兩個線程正在互相等對方讓步(也就是釋放鎖),這種死鎖最為常見。