Go 言語は、同時プログラミング モデルを使用して複数のタスクの交互実行を処理するオープンソース プログラミング言語です。並行プログラミングでは、複数のコルーチンまたはスレッドが共有リソースに同時にアクセスすることがよくありますが、この場合、リソースの排他性を確保し、競合状態の発生を回避するために、ミューテックス ロックを使用する必要があります。
Go 言語では、ミューテックス ロックを含むさまざまな同期プリミティブを実装するための sync
パッケージが提供されています。 sync.Mutex
タイプは最も基本的なミューテックス ロック タイプで、2 つのメソッド Lock
と Unlock
を通じてリソースへの相互排他的アクセスを実装します。
sync.Mutex
の使用法を詳しく見てみましょう。
package main import ( "fmt" "sync" "time" ) var count int var mutex sync.Mutex func increment() { mutex.Lock() // 加锁 defer mutex.Unlock() // 解锁,在函数执行完毕后自动调用 count++ } func main() { for i := 0; i < 10; i++ { go increment() } time.Sleep(time.Second) // 等待所有协程执行完毕 fmt.Println("count:", count) }
上記のコードでは、カウンターの値を記録するためにグローバル変数 count
が最初に定義され、次に sync.Mutex
型のミューテックスが定義されます。ロックミューテックス
。 increment
関数で、mutex.Lock()
を呼び出してミューテックス ロックを取得し、count
操作を実行するためにクリティカル セクションに入ることができるのは 1 つのコルーチンだけであることを確認します。次に、mutex.Unlock()
を呼び出してミューテックス ロックを解放し、他のコルーチンが実行のために競合し続けることができるようにします。
main
関数では、ループを通じて 10 個のコルーチンが作成され、各コルーチンは increment
関数を呼び出してカウンター値をインクリメントします。すべてのコルーチンが確実に実行されるように、time.Sleep
関数を使用してメイン コルーチンを 1 秒待機させます。
最後に、カウンターの値を出力します。count: 10
が正しく出力されていることがわかります。
ミューテックス ロックを使用すると、共有リソースへの安全なアクセスが保証され、データ競合を回避できます。複数のコルーチンまたはスレッドが共有リソースにアクセスする場合、ミューテックス ロックを使用することが非常に重要です。 Go 言語の sync.Mutex
は、シンプルかつ強力なミューテックス ロック機能を提供し、同時プログラミングをより簡単かつ安全にします。
以上がGo 言語のドキュメント分析: sync.Mutex 関数はミューテックス ロックを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。