サーチ…
ミューテックスロック
Goのミューテックスロックは、一度に1つのゴルーチンだけがロックを持つことを保証します。
import "sync"
func mutexTest() {
lock := sync.Mutex{}
go func(m *sync.Mutex) {
m.Lock()
defer m.Unlock() // Automatically unlock when this function returns
// Do some things
}(&lock)
lock.Lock()
// Do some other things
lock.Unlock()
}
Mutex
使用すると、競合状態、同時変更、および同じリソース上で動作する複数の並行ルーチンに関連するその他の問題を避けることができます。 Mutex.Unlock()
は、ロックを取得したルーチンだけでなく、どのルーチンでも実行できることに注意してください。また、別のルーチンがロックを保持している場合、 Mutex.Lock()
呼び出しは失敗しません。ロックが解除されるまでブロックされます。
ヒント:関数にMutex変数を渡すときは、常にそれをポインタとして渡します。それ以外の場合は、変数のコピーが作成されます。このコピーは、ミューテックスの目的を無効にします。古いGoバージョン(<1.7)を使用している場合、コンパイラはこの間違いについて警告しません!
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow