Heim  >  Artikel  >  Backend-Entwicklung  >  Wann sollte Lock-in-Golang verwendet werden?

Wann sollte Lock-in-Golang verwendet werden?

(*-*)浩
(*-*)浩Original
2019-12-27 11:30:552761Durchsuche

Wann sollte Lock-in-Golang verwendet werden?

Das Synchronisierungspaket im Go-Sprachpaket bietet zwei Sperrtypen: sync.Mutex und sync.RWMutex.                                                                                                        (Empfohlen zum Lernen: go)

Mutex ist die einfachste Art von Sperre und auch relativ gewalttätig. Wenn eine Goroutine den Mutex erhält, können sich andere Goroutinen nur verhalten. Warten Sie, bis diese Goroutine den Mutex freigibt.

RWMutex ist relativ benutzerfreundlich und ein klassisches „Write-Once-Read-Many“-Modell. Wenn die Lesesperre belegt ist, wird das Schreiben blockiert, das Lesen jedoch nicht. Das heißt, mehrere Goroutinen können gleichzeitig die Lesesperre erwerben (Aufruf der RLock()-Methode;

, während die Die Schreibsperre (Aufruf der Lock()-Methode) verhindert das Eintreffen anderer Goroutinen (ob lesend oder schreibend). Die gesamte Sperre entspricht dem ausschließlichen Besitz dieser Goroutine. Aus der Implementierung von RWMutex wird der RWMutex-Typ tatsächlich mit Mutex kombiniert :

type RWMutex struct {
    w Mutex
    writerSem uint32
    readerSem uint32
    readerCount int32
    readerWait int32
}

sync.mutex Nach dem Sperren ist das Lesen oder Schreiben an anderen Stellen verboten. Dies gilt für mögliche Änderungen an denselben Daten in verschiedenen Go-Coroutinen

Die Verwendung von Sperren und Entsperren in sync.rwmutex ähnelt sync.mutex

Die Verwendung von rlock und runlock in sync.rwmutex eignet sich zum Lesen von Daten, um Lesefehler durch das Schreiben in andere zu verhindern Orte, die beim Lesen auftreten können

Das obige ist der detaillierte Inhalt vonWann sollte Lock-in-Golang verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn