ここは私の主な機能の本体です。初心者レベルのコードでデッドロック
c := make(chan int)
go func() {
i := <-c
i++
time.Sleep(100 * time.Millisecond)
c <-i
}()
time.Sleep(1 * time.Second)
go func() {
i := <-c
i++
time.Sleep(100 * time.Millisecond)
c <-i
}()
time.Sleep(1 * time.Second)
fmt.Println(<-c)
私はdeadgroup error.evenを取得しています。私はwaitgroups.hellaで試してみました。
答えを説明することは私にとっては素晴らしいことです。
'c'に何も書き込まないので、3つのスレッドはすべてロックされています。 – zerkms
printlnの前に "c < - 0"を追加しましたが、それは動作しますが、最初にfuncに行く前に追加すると、同じデッドロックエラーが発生しました。 –
@ KadirSusuz最初のゴルーチンを作成する前に書き込み操作を追加すると、バッファされていないチャンネルに書き込もうとしています。この操作は、値がチャネルから読み取られるまでブロックされますが、読み込みを開始するためのゴルーチンは開始していません。解決策は、最初にゴルーチンを開始するか、バッファされたチャネルを作成することです。 – Gavin