1 回答

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
第一部分的答案
f1()
假設(shè)您有一個(gè)用于defer
調(diào)用的函數(shù)f2()
,即defer f2()
。事實(shí)上,即使發(fā)生運(yùn)行時(shí)恐慌,f2
當(dāng)且僅當(dāng)完成時(shí)才會(huì)調(diào)用。
現(xiàn)在我們關(guān)心的是在 goroutine 中使用 defer。我們還必須記住,如果 go-routine 的父函數(shù)完成退出,它就會(huì)退出。
因此,如果我們defer
在一個(gè) go-routine 函數(shù)中使用,那么如果父函數(shù)完成或退出,則 go-routine 函數(shù)必須退出。由于它退出(未完成),該defer
語(yǔ)句將不會(huì)執(zhí)行。很明顯,我們繪制了您程序的狀態(tài)。
如你所見(jiàn),
在第 1 毫秒,
service1()
先于其他人完成。因此,service2()
不執(zhí)行defer
語(yǔ)句就退出,并且“服務(wù) 2”不會(huì)設(shè)置為false
.?完成后service1()
,它將defer
執(zhí)行并將“服務(wù) 1”設(shè)置為false
。在第 2 毫秒,
main()
完成并程序結(jié)束。
所以我們看看這個(gè)程序是如何執(zhí)行的。
第二部分的答案
我嘗試過(guò)的一種可能的解決方案是增加時(shí)間service1()
或減少時(shí)間service2()
。
- 1 回答
- 0 關(guān)注
- 115 瀏覽
添加回答
舉報(bào)