Heim > Backend-Entwicklung > Golang > Wie behebt man den „schwerwiegenden Fehler: gleichzeitiges Kartenlesen und Kartenschreiben' in Go?

Wie behebt man den „schwerwiegenden Fehler: gleichzeitiges Kartenlesen und Kartenschreiben' in Go?

Patricia Arquette
Freigeben: 2024-12-31 04:09:40
Original
429 Leute haben es durchsucht

How to Solve the

„Schwerwiegender Golang-Fehler: gleichzeitiges Kartenlesen und Kartenschreiben“ erklärt

Der Fehler „schwerwiegender Fehler: gleichzeitiges Kartenlesen und Kartenschreiben“ in Go tritt auf, wenn mehrere Goroutinen ausgeführt werden Versuchen Sie, gleichzeitig lesend und schreibend auf eine Karte zuzugreifen. Dies kann passieren, wenn eine Goroutine versucht, von der Karte zu lesen, während eine andere Goroutine gleichzeitig darauf schreibt.

Lösungen

sync.RWMutex

Verwendung ein sync.RWMutex zur Steuerung des Zugriffs auf die Karte. Diese Option eignet sich für Szenarien mit einzelnen Lese- und Schreibvorgängen (keine Schleifen über die Karte).

var someMap = map[string]string{}
var someMapMutex = sync.RWMutex{}

go func() {
    someMapMutex.Lock()
    someMap["key"] = "value"
    someMapMutex.Unlock()
}()

someMapMutex.RLock()
v, ok := someMap["key"]
someMapMutex.RUnlock()
if !ok {
    fmt.Println("key missing")
    return
}
fmt.Println(v)
Nach dem Login kopieren

syncmap.Map

Eine Alternative ist die Verwendung einer Syncmap .Map{}, ein gleichzeitiger Kartentyp in Go. Sie verwaltet die Rennbedingungen intern und ist im Allgemeinen langsamer als eine normale Karte. Es eignet sich jedoch hervorragend für For-Loop-Szenarien.

var someMap = syncmap.Map{}

go func() {
    someMap.Store("key", "value")
}()

v, ok := someMap.Load("key")
if !ok {
    fmt.Println("key missing")
    return
}
fmt.Println(v)

// Looping over keys is simplified with syncmap
someMap.Range(func(key, value interface{}) bool {
    val, ok := value.(string)
    if !ok {
        return false // Break iteration
    }
    fmt.Println(key, val)
    return true // Continue iteration
})
Nach dem Login kopieren

Allgemeiner Hinweis

Um diesen Fehler zu verhindern, wird empfohlen, Ihren Server mit der Option -race zu testen, um potenzielle Race-Bedingungen zu identifizieren und zu beseitigen .

go run -race server.go
Nach dem Login kopieren

Durch die Implementierung dieser Lösungen und die Befolgung dieser Richtlinien können Sie den Fehler „gleichzeitiges Lesen und Schreiben von Karten“ vermeiden und einen threadsicheren Zugriff auf freigegebene Daten in gewährleisten Ihr Go-Code.

Das obige ist der detaillierte Inhalt vonWie behebt man den „schwerwiegenden Fehler: gleichzeitiges Kartenlesen und Kartenschreiben' in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage