運(yùn)行 deadlock
package?main import?( ???"fmt" ) func?main()?{ ???ch?:=?make(chan?string) ???for?i?:=?0;?i?<?5;?i++?{ ??????go?printHello(i,?ch) ???} ???for?{ ??????message?:=?<-ch ??????fmt.Println(message) ???} } func?printHello(i?int,?ch?chan?string)?{ ???message?:=?fmt.Sprintf("groutine?%d?send?u?message",?i) ???fmt.Println(message) ???ch?<-?message }
以上是我運(yùn)行的代碼,執(zhí)行結(jié)果:
fatal?error:?all?goroutines?are?asleep?-?deadlock! groutine?4?send?u?message groutine?4?send?u?message goroutine?1?[chan?receive]: groutine?1?send?u?message main.main() groutine?1?send?u?message groutine?0?send?u?message /Users/donng/go/src/practice/cmd/hello-world/main.go:14?+0x9e groutine?2?send?u?message
2018-06-27
經(jīng)過(guò)測(cè)試找到問(wèn)題了,原文中用
這種寫(xiě)法,在 for 循環(huán)到最后, ch 沒(méi)有數(shù)據(jù)時(shí),程序死鎖。
2018-06-27
我將接收部分修改為以下,就可以了,不過(guò)很奇怪為什么老師的 5000 個(gè),沒(méi)有出現(xiàn)死鎖。