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

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

在同一范圍內調用通道會導致恐慌

在同一范圍內調用通道會導致恐慌

Go
鳳凰求蠱 2022-10-24 15:17:36
有人可以向我解釋為什么第一個代碼運行但第二個代碼失???第一 :func main() {  channel := make(chan int)  go demo(channel)  num := <-channel  println(num)}func demo(channel chan int) {  channel <- 2}第二個:func main() {    demo()}func demo() {    channel := make(chan int)    channel <- 2    num := <-channel    println(num)}在第二個中,我在演示功能中從通道中獲取輸入,但它仍然會造成死鎖,有人可以簡要解釋一下嗎?我可以看到,當我在同一范圍內調用通道時,它會導致問題。
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

您的通道是無緩沖的,因此寫入它會阻塞,因為沒有其他 goroutine 可以從中讀取。

進行此更改,它將運行:

channel := make(chan int, 1)


查看完整回答
反對 回復 2022-10-24
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

在第一種情況下,寫入通道是在一個單獨的 goroutine 中。當主 goroutine 阻塞從通道讀取時,仍然有一個 goroutine 可以寫入通道,因此它不是死鎖。最終,該 goroutine 寫入通道并且程序完成。

第二種情況,寫入通道塊,沒有其他goroutine在運行,所以是死鎖。


查看完整回答
反對 回復 2022-10-24
  • 2 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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