原文地址: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 }