Go はゴルーチン間の変数共有をどのように処理しますか?

Linda Hamilton
リリース: 2024-11-07 05:17:02
オリジナル
205 人が閲覧しました

How Does Go Handle Variable Sharing Between Goroutines?

ゴルーチンでの変数共有に対する Go のアプローチ

同時実行性は Golang の重要な側面であり、ゴルーチン間で変数がどのように共有されるかを理解することが重要です。例を通してこの概念を探り、Go のランタイムが変数アクセスをどのように管理するかを詳しく見てみましょう。

次のコード スニペットを考えてみましょう:

<code class="go">for i := 0; i < 5; i++ {
    go func() {
        fmt.Println(x) // Line X1
    }()
}</code>
ログイン後にコピー

このコードでは、ループを使用して複数の goroutine を作成します。 。各ゴルーチンは、ループの外で定義された x 変数へのアクセスを試みます (X1 行)。このコードを実行すると、値 4、0、1、3、2 がランダムな順序で出力されます。

次に、コードを少し変更してみましょう。

<code class="go">for i := 0; i < 5; i++ {
    go func() {
        fmt.Println(i) // Line X2
    }()
}</code>
ログイン後にコピー

この場合、各 goroutineループ内で i 変数にアクセスします (X2 行)。このコードを実行すると、5、5、5、5、5 が出力され、前の結果との大きな違いが示されます。

相違を理解するには、最初の例では新しい x 変数が使用されていることに注意することが重要です。変数シャドウイングにより、各ゴルーチン内に作成されます。その結果、各ゴルーチンには独自の一意の x 変数があり、ランダムな印刷順序が発生します。

ただし、2 番目の例では、i 変数がゴルーチン内で直接使用され、変数のシャドウイングを回避しています。したがって、すべてのゴルーチンは同じ i 変数にアクセスし、その結果、一律の出力値 5 が得られます。

この動作は、Go によるゴルーチン間の変数の処理における重要な違いを強調しています。変数シャドウイングは分離を提供できますが、予期しない結果につながる可能性もあります。この概念を理解し、ゴルーチンに値を渡すなどの適切なテクニックを利用することで、開発者はデータ競合を防ぎ、Golang アプリケーションで適切な変数共有を確保できます。

以上がGo はゴルーチン間の変数共有をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!