ホームページ > バックエンド開発 > Golang > golang チャネルを閉じると goroutine の同期も強制されますか?

golang チャネルを閉じると goroutine の同期も強制されますか?

WBOY
リリース: 2024-02-09 20:15:31
転載
488 人が閲覧しました

关闭 golang 通道是否也会强制 goroutine 同步?

php エディターの Xigua が、golang チャネルに関する質問に答えます。golang チャネルを閉じると goroutine の同期も強制されますか?通常、チャネルを閉じてもゴルーチンの同期は強制されませんが、チャネルを閉じるとチャネルに対する読み取り操作がトリガーされ、ゼロ値とブール値が返されます。チャネルに未読のデータがある場合、読み取り操作はデータと true を返します。チャネルに未読のデータがない場合、読み取り操作は 0 と false を返します。したがって、チャネルを閉じた後、チャネルを読み取ることで、チャネル内のすべてのデータが読み取られたかどうかを判断できます。

質問内容

書籍『Go プログラミング言語』(226 ページ)に記載されているとおり:

リーリー

チャンネルを閉じても同じことが起こりますか?つまり、チャネルを閉じる受信は、チャネルを閉じたゴルーチンが再び起動する前に常に行われるのでしょうか?

それに関連するものを読んだ記憶があります。本で探しましたが見つかりませんでした。

回避策

チャネルを閉じても、バッファリングされていないチャネルで送信する場合のように、ゴルーチンの同期は強制されません。

Go メモリ モデル仕様には次のように記載されています:

close() を呼び出す goroutine は、別の goroutine がゼロ値を受け取るのを待機することをブロックしません。

バッファリングされていないチャネルに値を送信する Goroutine は、別の Goroutine が値を受信するまでブロックされます。

以上がgolang チャネルを閉じると goroutine の同期も強制されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート