環境: OS X 10.8、Go 1.0.2
buffer-size 2 でチャネルを作成し、チャネルを 3 回書き込むと、エラーがスローされます。
throw: すべてのゴルーチンがスリープ状態 - デッドロック!
もちろん、それは正しいです。
しかし、ゴルーチンで channel を 4 回以上書き込むと、正常に動作します。なぜですか? チャネルの容量は 2 ですが、ゴルーチンがそれを無視したり、容量の設定を忘れたりするのはなぜですか? read-channel コードにコメントを付けて、誰もチャネルを読み取って容量を節約しないようにします。また、time.Sleep を使用して、すべてのゴルーチンが作業を完了するのを待ちます。
次のコードを確認してください: パッケージ メイン
//import "fmt"
func main() {
c := make(chan int, 2)
/*c <- 1
c <- 2
c <- 3*/
for i:=0; i<4; i++ {
go func(i int) {
c <- i
c <- 9
c <- 9
c <- 9
}(i)
}
time.Sleep(2000 * time.Millisecond)
/*for i:=0; i<4*2; i++ {
fmt.Println(<-c)
}*/
}
誰かヒットさせてくれませんか?みんなありがとう。