ホームページ >バックエンド開発 >Golang >golangでデッドロックに対処する方法

golangでデッドロックに対処する方法

(*-*)浩
(*-*)浩オリジナル
2019-12-30 15:37:372846ブラウズ

golangでデッドロックに対処する方法

デッドロック

デッドロックとは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。