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

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

重用 Go 通道導致死鎖

重用 Go 通道導致死鎖

Go
慕容3067478 2021-06-23 21:01:54
我是新手golang(具有Java并發背景)??紤]一下代碼的和平:package mainimport "fmt"func sendenum(num int, c chan int) {    c <- num}func main() {    c := make(chan int)    go sendenum(0, c)    x, y := <-c, <-c    fmt.Println(x, y)}當我運行此代碼時,出現此錯誤fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]:main.main()    /home/tarrsalah/src/go/src/github.com/tarrsalah/stackoverflow/chan_dead_lock.go:12 +0x90exit status 2我知道,添加另一條go sendenum(0, c)語句可以解決問題,...但是當與凡僵局發生了什么?
查看完整描述

2 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

收到 0 后,main繼續等待接收端的c另一個值到達(放入y變量),但它永遠不會,因為運行的 goroutinemain是唯一剩下的。

當您添加另一個 時go sendenum(0, c),它實際上在第二個通道接收時獲得一個值,將其放入y變量中,打印xy輸出,程序成功完成。


查看完整回答
反對 回復 2021-06-28
?
胡子哥哥

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

并不是說“重用”頻道是個問題。這只是一個簡單的死鎖發生,因為代碼規定了兩次讀取,但只有一次寫入同一個通道。第二次讀取永遠不會發生,因此會出現死鎖。


查看完整回答
反對 回復 2021-06-28
  • 2 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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