ホームページ > バックエンド開発 > Golang > golang の同時プログラミングで異なる配列長が出力されるのはなぜですか?

golang の同時プログラミングで異なる配列長が出力されるのはなぜですか?

PHPz
リリース: 2024-02-09 11:42:29
転載
646 人が閲覧しました

golang の同時プログラミングで異なる配列長が出力されるのはなぜですか?

php Xiaobian Yuzai は、同時実行 Golang プログラミングで異なる配列長を出力するという質問に答えます。並行プログラミングでは、複数のゴルーチンが共有リソースを同時に操作すると、競合状態が発生し、不確実な結果が生じる可能性があります。複数のゴルーチンが配列に対して同時に動作する場合、配列の長さが異なる場合があります。これは、ゴルーチン間の実行順序が不定であり、読み取りと書き込みの操作が同時に発生する可能性があり、結果として配列の長さが不一致になるためです。この問題を解決するには、ミューテックス ロックやチャネルなどのメカニズムを使用して、ゴルーチン間の同期と順次実行を確保し、特定の結果を得ることができます。

質問内容

同時テスト用にgolangで簡単なプログラムを書いているのですが、毎回の大文字の違いが分かりません 配列サイズ 出力してください!

リーリー

出力:

リーリー リーリー リーリー リーリー
data := []rune{'a', 'b', 'c', 'd'}
var capitalized []rune

capit := func(r rune) {
    capitalized = append(capitalized, unicode.toupper(r))
    fmt.printf("%c done!\n", r)
}

fmt.printf("before: %c\n", capitalized)
for i := 0; i < len(data); i++ {
    go capit(data[i])
}
time.sleep(100 * time.millisecond)
fmt.printf("after: %c\n", capitalized)
ログイン後にコピー

ソリューション

go: Data Race Detector

データ競合が発生しています。

リーリー

レーサー.ゴー:

リーリー

以上がgolang の同時プログラミングで異なる配列長が出力されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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