第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用for循環(huán)遍歷通道時出現(xiàn)Goroutine死鎖

使用for循環(huán)遍歷通道時出現(xiàn)Goroutine死鎖

Go
慕尼黑的夜晚無繁華 2023-06-26 17:11:09
我正在嘗試練習 goroutine 和通道,但我遇到了調(diào)用 gorouting 和傳遞通道的問題。Goroutine 將數(shù)據(jù)推送到通道中,然后主線程將打印元素。我已經(jīng)使用 for 循環(huán)來打印內(nèi)容但是得到了。fatal error: all goroutines are asleep - deadlock!21goroutine 1 [chan receive]:main.main()package mainimport "fmt"func smallThread(a int, c chan int) {    c <- a}func main() {    c := make(chan int)    go smallThread(1, c)    go smallThread(2, c)    for {        fmt.Println(<-c)    }}編輯:使用等待組:func smallThread(a int, c chan int, w *sync.WaitGroup) {    c <- a    w.Done()}func main() {    c := make(chan int)    var w sync.WaitGroup    w.Add(2)    go smallThread(1, c, &w)    go smallThread(2, c, &w)    //w.Wait()    for i := range c {        fmt.Println(i)    }    w.Wait()}EDIT2:工作代碼func smallThread(a int, c chan int, w *sync.WaitGroup) {    //defer w.Done()    c <- a    w.Done()}func main() {    c := make(chan int)    var w sync.WaitGroup    w.Add(1)    go smallThread(1, c, &w)    w.Add(1)    go smallThread(2, c, &w)    go func(c chan int) {        for i := range c {            fmt.Println(i)        }    }(c)    w.Wait()}
查看完整描述

2 回答

?
慕萊塢森

TA貢獻1810條經(jīng)驗 獲得超4個贊

當 goroutine 完成后,關(guān)閉通道以指示不再添加任何值。當接收到所有值后,for 循環(huán)將中斷。


c := make(chan int)

var w sync.WaitGroup

w.Add(2)

go smallThread(1, c, &w)

go smallThread(2, c, &w)

go func() {

    w.Wait()

    close(c)

}()


for i := range c {

    fmt.Println(i)

}


查看完整回答
反對 回復 2023-06-26
?
DIEA

TA貢獻1820條經(jīng)驗 獲得超3個贊

不確定你的問題是什么,但我會告訴你會發(fā)生什么。你的兩側(cè) goroutine 將它們的數(shù)字推送到通道并退出。然后主 goroutine(此時只剩下唯一的一個)將永遠阻塞,等待另一個元素從通道中出來。



查看完整回答
反對 回復 2023-06-26
  • 2 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號