python死鎖的產(chǎn)生原因
1、程序永遠(yuǎn)無(wú)法運(yùn)行結(jié)束,根本原因在于:
一個(gè)線程持有鎖1同時(shí)在請(qǐng)求鎖2,另一個(gè)線程持有鎖2同時(shí)在請(qǐng)求鎖1,二者不得到對(duì)方的鎖都不會(huì)放開自己的鎖,程序就這樣僵持下去了。
2、實(shí)例
兩個(gè)線程會(huì)同時(shí)開啟,程序打印出
print1firstThread-1
print1secondThread-1
print2firstThread-1
print1firstThread-2
(1)第一個(gè)線程先執(zhí)行print1,獲得了鎖1,等待1秒。這時(shí)第二個(gè)線程已經(jīng)開啟,企圖獲得鎖1,但是獲取不到于是等待
(2)第一個(gè)線程等待時(shí)間結(jié)束,獲得鎖2,打印結(jié)束釋放兩把鎖。之后馬上開始執(zhí)行print2,并獲得鎖2,等待1秒
(3)這時(shí)第二個(gè)線程可以獲得鎖1了,開始執(zhí)行print1,也等待1秒
(4)等待時(shí)間結(jié)束,第一個(gè)線程持有鎖2企圖獲得鎖1,第一個(gè)線程持有鎖1企圖獲得鎖2,就陷入了僵局
以上就是Python死鎖的產(chǎn)生原因,希望對(duì)大家有所幫助。更多Python學(xué)習(xí)推薦:請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。