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!