GoのGoroutine について教えて下さい。
Goroutineを使って下記プログラムを作成しました。(Playgroundで実行できませんがローカルではできます)
https://play.golang.org/p/5IdzS4FAtp
しかし、これはでスタックしてしまいます。
このようなプログラムをスタックせずに実行するにはどうすればいいのでしょうか。
プログラム
package main
import "fmt"
import "runtime"
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
msgCh := make(chan string)
count := 0.0
for i := 0; i < 255; i++ {
go first(msgCh)
}
L:
for {
select {
case msg := <-msgCh:
count++
fmt.Printf("%f:%s\n", count, msg)
if count == 4294967296 {
break L
}
default:
}
}
}
func first(msgCh chan string) {
for i := 0; i < 255; i++ {
go second(msgCh)
}
}
func second(msgCh chan string) {
for i := 0; i < 255; i++ {
go third(msgCh)
}
}
func third(msgCh chan string) {
for i := 0; i < 255; i++ {
msgCh <- "Hello"
}
}