関数の安全性: goroutine の安全性: 同時 goroutine 内で安全に呼び出すことができます。非ゴルーチンの安全性: 共有状態にアクセスするか、特定のゴルーチンに依存します。同期メカニズム: Mutex: 共有リソースへの同時アクセスを保護します。 RWMutex: 同時読み取りと 1 回の書き込みのみが許可されます。 Cond: 特定の条件が満たされるまで待機します。 WaitGroup: ゴルーチンのグループが完了するまで待ちます。実際のケース: 同時実行カウンターは Mutex を使用して共有状態を保護し、同時実行時の正確性を保証します。
同時環境における Go 関数の安全性と同期メカニズム
Go の同時環境では、関数の安全性と正しい同期メカニズムを理解することが重要です。この記事では、これらの概念を検討し、実際のケースを通じて説明します。
関数の安全性
同期メカニズム
データの一貫性を確保し、同時環境での競合を回避するには、同期メカニズムを使用する必要があります。 Go には、いくつかの組み込み同期タイプが用意されています。
実際のケース: 同時実行カウンター
同時実行カウンターの例を考えてみましょう。これは、並行してインクリメントできる goroutine の安全な変数に格納された値です。同時実行下でカウンタの正確性を保証するには、同期メカニズムを使用する必要があります。
package main import ( "fmt" "sync" "sync/atomic" ) var ( cnt int64 // 原子计数器 mu sync.Mutex // 互斥锁 ) func main() { wg := &sync.WaitGroup{} // 并发增量计数器 for i := 0; i < 10; i++ { wg.Add(1) go func() { mu.Lock() cnt++ mu.Unlock() wg.Done() }() } wg.Wait() fmt.Println("最终计数:", cnt) }
この例では、競合状態を防ぐためにカウンター cnt
声明为原子变量以确保并发的安全增量。使用 mutex mu
来保护对 cnt
に同時にアクセスします。
このプログラムを実行すると、次の出力が表示されます:
最终计数: 10
これは、カウンターが並行して 10 回正しくインクリメントされていることを確認します。
以上が並行環境における Golang 機能のセキュリティと同期メカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。