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

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

PHPz
PHPz転載
2024-02-15 15:10:08550ブラウズ

在 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 までご連絡ください。