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

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

PHPz
PHPz転載
2024-02-09 11:42:29637ブラウズ

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