2 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個贊
goroutine 可以阻止等待通道準(zhǔn)備好發(fā)送或接收,但通道本身永遠(yuǎn)不會處于“阻塞”狀態(tài)。
第一個程序不會死機(jī),因?yàn)?main 函數(shù)執(zhí)行到最后并終止程序。
同一 go-routine 能否在寫入通道后執(zhí)行通道讀取操作?
否,如果通道未緩沖(默認(rèn)值)。對于無緩沖信道,發(fā)送 goroutine 會阻塞,直到接收 goroutine 準(zhǔn)備就緒。
單個 goroutine 不能同時執(zhí)行發(fā)送和接收。如果只有一個 goroutine 發(fā)送到通道,則 goroutine 會永遠(yuǎn)阻塞。
如果某個通道被阻塞,其他 go-routine 還能向它發(fā)送消息嗎?
goroutine 可以在通道關(guān)閉之前的任何時間將值發(fā)送到通道。Goroutine 可以阻止等待通道準(zhǔn)備好發(fā)送。
如果 go-routine 嘗試將消息發(fā)送到被阻止的通道,會發(fā)生什么情況?它會通過錯誤,還是什么也沒發(fā)生,或者?
Goroutine可以阻止等待頻道準(zhǔn)備就緒。通道本身未處于阻塞狀態(tài)。

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個贊
通道不會“阻塞”。通道上的讀取或?qū)懭氩僮骺赡軙枞?/p>
對于無緩沖通道(這是您上面的內(nèi)容):寫入操作將阻止寫入 goroutine,直到另一個 goroutine 準(zhǔn)備好從該通道讀取。當(dāng)讀取 goroutine 準(zhǔn)備好讀?。磮?zhí)行 <-ch)時,則寫入和讀取發(fā)生,并且兩個 goroutine 繼續(xù)運(yùn)行。
對于緩沖通道:只要通道緩沖區(qū)未滿,寫入操作就不會阻塞。同樣,如果有要從通道讀取的內(nèi)容,則讀取不會阻塞。
至于你的問題:
如果所討論的通道未緩沖,則寫入操作將阻塞,因?yàn)橹挥挟?dāng)另一個 goroutine 正在從該通道讀取時,寫入操作才能繼續(xù)。因此,goroutine不會進(jìn)展為從通道讀取。如果這是一個緩沖通道,并且通道未滿,則相同的 goroutine 可以寫入該通道并從中讀取。
如果一個 goroutine 正在等待寫入一個通道,而另一個 goroutine 來寫入它,它也會阻塞,直到另一個 goroutine 從通道讀取。
如果 goroutine 嘗試寫入已滿的通道,它將阻塞,直到另一個 goroutine 可以從該通道讀取。
- 2 回答
- 0 關(guān)注
- 88 瀏覽
添加回答
舉報