同時プログラミングでは、データの一貫性を確保することが重要です。 Go は、共有データを管理するためのミューテックス ロックとアトミック操作を提供します。ミューテックスにより、一度に 1 つのゴルーチンがデータにアクセスできるようになりますが、アトミック操作により個々のメモリ書き込みのアトミック性と可視性が保証されます。
はじめに
並行プログラミングでは、複数のゴルーチンが共有データに同時にアクセスする場合、データの一貫性を確保することが重要です。 Go は、開発者が共有データを管理し、その一貫性を確保するのに役立つ、ミューテックス ロックやアトミック値などのいくつかの組み込みメカニズムを提供します。
ミューテックス
ミューテックスは、ゴルーチンが一度に共有データにアクセスできるようにするメカニズムです。 goroutine がミューテックスを取得すると、ミューテックスが解放されるまで他の goroutine はブロックされます。
import ( "fmt" "sync" ) var ( mu sync.Mutex counter int ) func incrementCounter() { mu.Lock() counter++ mu.Unlock() } func main() { // 创建多个goroutine并行增加计数器 for i := 0; i < 1000; i++ { go incrementCounter() } // 等待所有goroutine完成 time.Sleep(100 * time.Millisecond) fmt.Println("最终计数器值:", counter) }
アトミック操作
アトミック操作は、複数のゴルーチンによって同時に実行できる一連の低レベルの操作であり、メモリへの単一の書き込み操作が中断されないことを保証します。これにより、メモリ操作の原子性と可視性が保証されます。
import ( "fmt" "sync/atomic" ) var counter int64 func incrementCounter() { atomic.AddInt64(&counter, 1) } func main() { // 创建多个goroutine并行增加计数器 for i := 0; i < 1000; i++ { go incrementCounter() } // 等待所有goroutine完成 time.Sleep(100 * time.Millisecond) fmt.Println("最终计数器值:", counter) }
結論
Mutex ロックとアトミック操作は、Go 同時プログラミングで共有データを処理し、データの一貫性を確保するための重要なツールです。これらのメカニズムを正しく使用することで、開発者は、同時実行性があり、信頼性が高く、正確なコードを作成できます。
以上がGo 並行プログラミング: データの整合性とアトミック操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。