ホームページ > バックエンド開発 > Golang > Goroutine のパイプ io.Copy の待機中にデッドロックが発生する

Goroutine のパイプ io.Copy の待機中にデッドロックが発生する

PHPz
リリース: 2024-02-15 15:10:08
転載
586 人が閲覧しました

在 Goroutine 中等待管道 io.Copy 时发生死锁

Goroutine でパイプ io.Copy を待機しているときのデッドロックは、一般的な問題です。 Goroutine で io.Copy の完了を待つとき、パイプが適切に閉じられていないとデッドロックが発生します。この場合、Goroutine はデータを待ち続けることになり、実行を続行できません。この問題の解決策は、io.Copy の完了後にパイプを手動で閉じて、Goroutine が適切に終了できるようにすることです。 PHP エディターの Apple は、この種のデッドロック状況にうまく対処できるよう、この問題の原因と解決策を詳しく紹介しています。

質問内容

以下のコードでは、io.copy への呼び出しが返されることはなく、無期限にブロックされるだけで、デッドロックが発生します。この現象は、io.readerio.pipe を使用して os.stdout io.writer に接続されている場合にのみ発生します。ただし、コード全体では io.multiwriterio.pipes を使用して io.reader を接続するため、多くの関数が必要とするため、パイプを使用する必要があります。 io.reader

リーリー

出力:

リーリー

コードへのプレイグラウンド リンクは次のとおりです: https://goplay.tools/snippet/70ubgiz8ftv

io.pipe を保持しながらデッドロックを回避する方法はありますか?

解決策

完了後にパイプの書き込み側を閉じます:

リーリー

そうしないと、リーダーは無期限に待機することになります。

以上がGoroutine のパイプ io.Copy の待機中にデッドロックが発生するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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