1 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
和 都有f1()
接收f2()
操作。這些是阻塞操作:只要通道上沒(méi)有人發(fā)送任何內(nèi)容,它們就會(huì)等待。
所以你啟動(dòng)f1()
并f2()
作為新的 goroutine,然后main()
睡覺(jué)。同時(shí)f1()
和f2()
正在等待來(lái)自ch1
和的數(shù)據(jù)ch2
。
然后main()
醒來(lái),并嘗試在 上發(fā)送一個(gè)值ch1
。這是可以的,因?yàn)橛幸粋€(gè) goroutine 準(zhǔn)備好從它接收數(shù)據(jù) ( f1()
)。然后main()
嘗試發(fā)送ch2
,這也可以,已經(jīng)f2()
準(zhǔn)備好接收了。
然后main()
返回,應(yīng)用程序結(jié)束(它不等待其他 goroutine 打印)。
如果您不啟動(dòng)f1()
并且f2()
作為新的 goroutine,當(dāng)main()
到達(dá)發(fā)送語(yǔ)句時(shí),將沒(méi)有人準(zhǔn)備好從通道接收數(shù)據(jù),并且由于它是無(wú)緩沖的,因此它將阻塞。由于不會(huì)再有任何 goroutine 運(yùn)行,因此這是一個(gè)僵局。
- 1 回答
- 0 關(guān)注
- 181 瀏覽
添加回答
舉報(bào)