Go 言語パッケージの同期パッケージは、sync.Mutex と sync.RWMutex という 2 つのロック タイプを提供します。 (推奨学習: go)
Mutex は最も単純なタイプのロックですが、より暴力的でもあります。Goroutine が Mutex を取得すると、他の Goroutine は動作のみ可能になります。このゴルーチンはミューテックスを解放します。
RWMutex は比較的使いやすく、古典的な単一書き込み複数読み取りモデルです。読み取りロックが占有されている場合、書き込みはブロックされますが、読み取りはブロックされません。つまり、複数のゴルーチンが同時に読み取りロックを取得できます (RLock() メソッドの呼び出し;
、書き込みロック (Lock() メソッドの呼び出し) は、他のゴルーチン (読み取りと書き込みに関係なく) が入ってくるのを防ぎ、ロック全体はこのゴルーチンによって排他的に所有されることと同等になります。RWMutex の実装から、RWMutex 型は実際には結合されます。ミューテックス:
type RWMutex struct { w Mutex writerSem uint32 readerSem uint32 readerCount int32 readerWait int32 }
sync.mutex ロック後、他の場所での読み取りまたは書き込みは禁止されます。これは、異なる go コルーチンでの同じデータへの変更の可能性に適用されます。
sync.rwmutex での lock と lock、unlock の使用は sync.mutex の使用と似ています
sync.rwmutex の rlock と runlock の使用は、読み取りエラーによる読み取りエラーを防ぐためにデータの読み取りに適しています。読んでいる間に他の場所に書き込むことによって。
以上がGolang でロックを使用する場合の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。