php エディターの Xigua が、golang チャネルに関する質問に答えます。golang チャネルを閉じると goroutine の同期も強制されますか?通常、チャネルを閉じてもゴルーチンの同期は強制されませんが、チャネルを閉じるとチャネルに対する読み取り操作がトリガーされ、ゼロ値とブール値が返されます。チャネルに未読のデータがある場合、読み取り操作はデータと true を返します。チャネルに未読のデータがない場合、読み取り操作は 0 と false を返します。したがって、チャネルを閉じた後、チャネルを読み取ることで、チャネル内のすべてのデータが読み取られたかどうかを判断できます。
書籍『Go プログラミング言語』(226 ページ)に記載されているとおり:
リーリーチャンネルを閉じても同じことが起こりますか?つまり、チャネルを閉じる受信は、チャネルを閉じたゴルーチンが再び起動する前に常に行われるのでしょうか?
それに関連するものを読んだ記憶があります。本で探しましたが見つかりませんでした。
チャネルを閉じても、バッファリングされていないチャネルで送信する場合のように、ゴルーチンの同期は強制されません。
Go メモリ モデル仕様には次のように記載されています:
close()
を呼び出す goroutine は、別の goroutine がゼロ値を受け取るのを待機することをブロックしません。
バッファリングされていないチャネルに値を送信する Goroutine は、別の Goroutine が値を受信するまでブロックされます。
以上がgolang チャネルを閉じると goroutine の同期も強制されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。