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