ホームページ  >  記事  >  バックエンド開発  >  Golang 関数同時プログラミングの同期メカニズムは何ですか?

Golang 関数同時プログラミングの同期メカニズムは何ですか?

WBOY
WBOYオリジナル
2024-04-17 17:30:01380ブラウズ

Go の同時プログラミングでは、同期メカニズムが共有データの整合性を確保する鍵となります。以下のようなさまざまな組み込み型が提供されます: Mutex (Mutex): 共有データへの排他的アクセスを提供します。読み取り/書き込みロック: 複数の goroutine が同時に読み取ることができますが、1 つの goroutine のみがデータを書き込むことができます。ゴルーチン間で待機および起動する座標用。

Golang 関数同時プログラミングの同期メカニズムは何ですか?

Go 関数同時プログラミングにおける同期の仕組み

Go の同時プログラミングにおいて、複数のゴルーチン (When 軽量スレッドの Golang) が動作する場合データを同時に共有するには、データの整合性を確保するために同期メカニズムが必要です。 Go は、Goroutine アクセスを調整するためのさまざまな組み込み同期タイプを提供します。

1. Mutex

Mutex (ミューテックス ロック) は、共有データへの排他的アクセスを提供する最も基本的な同期メカニズムです。一度に 1 つの goroutine だけがミューテックスを保持できるため、共有データに対するアトミックな操作が保証されます。

import (
    "fmt"
    "sync"
)

func main() {
    var count int
    var mu sync.Mutex

    for i := 0; i < 1000; i++ {
        go func(i int) {
            mu.Lock()
            count++
            mu.Unlock()
        }(i)
    }

    fmt.Println("Count:", count) // 输出:1000
}

2. 読み取り/書き込みロック

読み取り/書き込みロックは、複数のゴルーチンが同時に共有データを読み取ることを可能にする高度な同期メカニズムです。共有データを書き込むゴルーチンがあります。これにより、データの整合性を確保しながら同時実行パフォーマンスが向上します。

import (
    "fmt"
    "sync"
)

func main() {
    var count int
    var rw sync.RWMutex

    for i := 0; i < 1000; i++ {
        go func(i int) {
            rw.RLock()
            fmt.Println("Reading:", count)
            rw.RUnlock()
        }(i)

        go func(i int) {
            rw.Lock()
            count++
            fmt.Println("Writing:", count)
            rw.Unlock()
        }(i)
    }
}

3. 条件変数

条件変数 (cond) は、ゴルーチン間の待機と起動を調整するために使用されます。 goroutine が特定の条件を満たすと、その条件を待っている goroutine を起動することができます。

rree

以上がGolang 関数同時プログラミングの同期メカニズムは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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