デッドロック
デッドロックとは、2 つ以上のコルーチンの実行中に、リソースの競合または相互のブロッキング現象が原因で発生することを意味します。コミュニケーションによるものであり、外からの力がなければ前に進むことはできません。 (推奨学習: go)
一般的なデッドロック
シナリオ 1: go プロセスでチャネルの読み取りと書き込みが行われる
func main() { c:=make(chan int) c<-88 <-c }
シナリオ 2: go プロセスが開始される前にチャネルを使用する
func main() { c:=make(chan int) c<-88 go func() { <-c }() }
シナリオ 3: チャネル 2 がチャネル 1 で呼び出され、チャネル 1はチャネル 2 で呼び出されます
func main() { c1,c2:=make(chan int),make(chan int) go func() { for { select{ case <-c1: c2<-10 } } }() for { select{ case <-c2: c1<-10 } } }
デッドロックはさまざまな状況で発生しますが、それらはすべてリソースとデータ通信の競合によって引き起こされます。
デッドロックの解決策はロックすることです。
以上がgolangでデッドロックに対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。