Heim >Backend-Entwicklung >Golang >Wie kann ich Abstürze beim gleichzeitigen Schreiben von Karten in Go verhindern?
Verhindern von gleichzeitigen Abstürzen beim Schreiben von Karten
Beim Versuch, gleichzeitig von mehreren Goroutinen aus auf dieselbe Karte zu schreiben, löst Go 1.6 einen absichtlichen Absturz aus, um dies zu verhindern Datenkorruption. Im Gegensatz zu Paniken, die durch die Verwendung von „Defer“ und „Recover“ wiederhergestellt werden können, ist dieser Absturz beabsichtigt und kann nicht abgefangen werden.
Um dieses Problem zu beheben, vermeiden Sie gleichzeitige Schreibvorgänge in Karten. Im bereitgestellten Beispiel:
package main import "time" var m = make(map[string]string) func main() { go func() { // Rewrite m["x"] = "foo" in a loop for { m["x"] = "foo" } }() go func() { // Rewrite m["x"] = "foo" in a loop for { m["x"] = "bar" } }() time.Sleep(1 * time.Second) // Keep the program running }
Die gleichzeitigen Schreibvorgänge in die Karte von mehreren Goroutinen verstoßen gegen die Parallelitätsregeln von Go für Karten und verursachen den absichtlichen Absturz.
Um diesen Absturz zu verhindern und die Datenintegrität durchzusetzen, Erwägen Sie die Verwendung eines Mutex- oder Synchronisierungsprimitivs, um den Zugriff auf die Karte zu steuern. Dadurch wird sichergestellt, dass jeweils nur eine Goroutine die Karte ändern kann.
Das obige ist der detaillierte Inhalt vonWie kann ich Abstürze beim gleichzeitigen Schreiben von Karten in Go verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!