ホームページ  >  記事  >  バックエンド開発  >  Golang でロックを使用する場合

Golang でロックを使用する場合

(*-*)浩
(*-*)浩オリジナル
2019-12-27 11:30:552762ブラウズ

Golang でロックを使用する場合

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。