ホームページ > バックエンド開発 > Golang > プロデューサー コンシューマーの問題により、ゴルーチンがスリープ状態であるというエラーが発生するのはなぜですか

プロデューサー コンシューマーの問題により、ゴルーチンがスリープ状態であるというエラーが発生するのはなぜですか

WBOY
リリース: 2024-02-10 21:40:25
転載
1010 人が閲覧しました

为什么我会收到 - goroutines are sleeped 错误,因为生产者消费者问题

php エディター Youzi は、プログラミングの問題を解決するときに、「ゴルーチンがスリープされています」という一般的なエラー メッセージに遭遇することがあります。このエラーは通常、プロデューサーとコンシューマーの問題に関連しています。プロデューサーとコンシューマーの問題は、同時プログラミングにおける古典的なシナリオであり、1 つ以上のプロデューサーがデータを生成し、1 つ以上のコンシューマーがそれを処理のために取り出します。コンシューマーがデータを処理できるよりも早くプロデューサーがデータを生成すると、ゴルーチン (Go 言語の軽量スレッド) がスリープ状態になる可能性があります。この記事では、このエラーが発生する理由と解決策を説明します。

質問内容

これは、go ルーチンのプロデューサーと複数のコンシューマーのコードです。 プロデューサはチャネルに情報を注入しており、複数のコンシューマ (それぞれゴールーチン経由) がそれを並行して読み取る必要があります。

リーリー

これはプレイグラウンドへのリンクです - https://go.dev/play/p/yndataeexpb

私が受け取ったエラーはこれです -

###1つ 2番 c 致命的なエラー: すべてのゴルーチンがスリープ状態です - デッドロック!

解決策

プロデューサーが終了したらチャネルを閉じて、コンシューマーがいつ停止すべきかを認識できるようにします。 リーリー

待機グループにコンシューマーの作業が終了したことを知らせます:

リーリー

以上がプロデューサー コンシューマーの問題により、ゴルーチンがスリープ状態であるというエラーが発生するのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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