目次
質問内容
ホームページ バックエンド開発 Golang 奇数と偶数を交互に出力するゴルーチンがデッドロックに陥る

奇数と偶数を交互に出力するゴルーチンがデッドロックに陥る

Feb 13, 2024 pm 04:00 PM
同期機構

交替打印奇数和偶数的 goroutine 陷入死锁

「奇数と偶数を交互に出力するゴルーチンがデッドロックに陥る」は、並行プログラミングでよくある問題です。同時操作に goroutine を使用する場合、正しい同期メカニズムがないと、デッドロックが発生しやすくなります。デッドロックとは、2 つ以上のプロセス (またはゴルーチン) が互いのリソースの解放を待っているため、実行を続行できない状態です。この記事では、この問題の原因を紹介し、開発者が並行プログラミングにおけるデッドロックの問題をより深く理解できるようにする解決策を提供します。

質問内容

現在golangを勉強中です。 golang チャンネルがどのように動作するかを確認したいと思います。 2つのゴルーチンが奇数と偶数を交互に出力するプログラムを作成しました。プログラムは正しく印刷されても、最後にデッドロック エラーが表示されます。エラー メッセージからは、この問題の原因は明らかではありません。

リーリー ###[編集] ご返信ありがとうございます。この問題を解決するために次のコードを書きました。

func main() {
    even := make(chan bool)
    odd := make(chan bool)
    go func() {
        defer close(odd)
        for i := 0; i <= 10; i += 2 {
            <-even
            print("even ====>")
            println(i)
            odd <- true
        }
    }()
    var wait sync.waitgroup
    wait.add(1)
    go func() {
        for i := 1; i <= 10; i += 2 {
            _, ok := <-odd
            if !ok {
                wait.done()
                return
            }
            print("odd ====>")
            println(i)
            even <- true
        }
    }()
    even <- true
    wait.wait()
}
ログイン後にコピー

解決策

この問題は次の方法で解決できます

    2 番目の gofunc (行 20) の for キャップを削除します
  1. even
  2. (28 行目) を書くときに selecting

以上が奇数と偶数を交互に出力するゴルーチンがデッドロックに陥るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

golang関数とゴルーチンのメリット・デメリットの比較 golang関数とゴルーチンのメリット・デメリットの比較 Apr 25, 2024 pm 12:30 PM

golang関数とゴルーチンのメリット・デメリットの比較

golang 関数と goroutine の親子関係 golang 関数と goroutine の親子関係 Apr 25, 2024 pm 12:57 PM

golang 関数と goroutine の親子関係

Java コレクション フレームワークにおける同時実行制御とスレッド セーフ Java コレクション フレームワークにおける同時実行制御とスレッド セーフ Apr 12, 2024 pm 06:21 PM

Java コレクション フレームワークにおける同時実行制御とスレッド セーフ

マルチスレッド環境では PHP 関数はどのように動作しますか? マルチスレッド環境では PHP 関数はどのように動作しますか? Apr 16, 2024 am 10:48 AM

マルチスレッド環境では PHP 関数はどのように動作しますか?

C++ 同時プログラミング: スレッド間通信を処理するには? C++ 同時プログラミング: スレッド間通信を処理するには? May 04, 2024 pm 12:45 PM

C++ 同時プログラミング: スレッド間通信を処理するには?

C++ の同時プログラミング フレームワークとライブラリは何ですか?それぞれの利点と制限は何ですか? C++ の同時プログラミング フレームワークとライブラリは何ですか?それぞれの利点と制限は何ですか? May 07, 2024 pm 02:06 PM

C++ の同時プログラミング フレームワークとライブラリは何ですか?それぞれの利点と制限は何ですか?

AIブームのもと、パブリックチェーンのインフラ路線にはどのような変化が起きたのでしょうか? AIブームのもと、パブリックチェーンのインフラ路線にはどのような変化が起きたのでしょうか? Apr 13, 2024 pm 04:49 PM

AIブームのもと、パブリックチェーンのインフラ路線にはどのような変化が起きたのでしょうか?

同時プログラミングにおける C++ 関数のロックと同期メカニズム? 同時プログラミングにおける C++ 関数のロックと同期メカニズム? Apr 27, 2024 am 11:21 AM

同時プログラミングにおける C++ 関数のロックと同期メカニズム?

See all articles