go deadlock

原文地址:go deadlock作者:funkygao
  1 package main
  2 
  3 func main() {
  4     ch:= make(chan int)
  5     ch<- 5
  6    <- ch
  7 }  

上面的代碼,在執行時會報:
throw: all goroutines are asleep - deadlock!

原因是:
ch <- 5,是unbufferedchannel,它會block,直到有人把它發送的消息取走。因此,第6行的語句永遠無法執行,造成死鎖

go判斷死鎖的代碼位於:
src/pkg/runtime/proc.c


解決辦法有2:
1. 把第4行修改爲:
ch := make(chan int, 1) // buffered channel

2. 創建新的goroutine來執行
 1 package main
  2 
  3 func main() {
  4     ch:= make(chan int)
  5     gofunc() {
  6        ch <- 5
  7    }()
  8    <- ch
  9 }

發佈了23 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章