亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

嘗試使用“范圍”打印通道值后出現死鎖

嘗試使用“范圍”打印通道值后出現死鎖

Go
慕桂英546537 2021-09-13 10:42:07
這是我在Go Playground 的代碼package mainimport (    "fmt")func sum_up(my_int int, cs chan int) {    my_sum := 0    for i := 0; i < my_int; i++ {        my_sum += i    }    cs <- my_sum}func main() {    my_channel := make(chan int)    for i := 2; i < 5; i++ {         go sum_up(i, my_channel)    }    for ele := range my_channel {        fmt.Println(ele)    }      //fatal error: all goroutines are asleep - deadlock!    fmt.Println("Done")}結果是:136fatal error: all goroutines are asleep - deadlock!我不明白是什么導致了錯誤。我的理解是,在我的函數中,sum_up我正在向my_channel. 為什么在我嘗試打印出值后會出現問題?由于我看到 1,3,6 被打印,這意味著所有goroutines都已成功完成。此外,如果試圖打印通道值的塊    for ele := range my_channel {        fmt.Println(ele)    }被刪除,然后我沒有收到錯誤。所以它包括導致錯誤的塊,但為什么呢?
查看完整描述

3 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

for range chan當 chan 收到關閉信號時退出。你必須在close(my_channel)某個地方,否則循環將永遠等待。


查看完整回答
反對 回復 2021-09-13
  • 3 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號