私はgolangを勉強しようとしていますが、私はちょっと後につまってしまったのか分かりません。次のコードサンプルが繰り返し実行された後にスタックされるのはなぜですか?
package main
import "log"
func main() {
deliveryChann := make(chan bool, 10000)
go func() {
for {
deliveryChann <- true
log.Println("Sent")
}
}()
go func() {
for {
select {
case <-deliveryChann:
log.Println("received")
}
}
}()
go func() {
for {
select {
case <-deliveryChann:
log.Println("received")
}
}
}()
go func() {
for {
select {
case <-deliveryChann:
log.Println("received")
}
}
}()
for {
}
}
基本的な調査方法で十分です。
そして、ここでの問題のために他のスレッドでスケジュールすることができます。しかし何らかの理由でそれが起こらない – creker
@クレッカー - はい、私は同じことを思った。私は現在原因を確かめていないので、現在調査中です。 – icio
と、デッドロックする前にしばらく走っているという事実をさらに混乱させます。私はそれがすぐにロックされ、それは完全にうまくいくかどうかを理解するだろう。ランタイムがより多くのワーカースレッドを生成する可能性がある前に、プロセスをロックする 'for {} 'のケースに完全に適合します。 – creker