Prévention des crashs d'écriture simultanés de cartes
Lorsque vous tentez d'écrire simultanément sur la même carte à partir de plusieurs goroutines, Go 1.6 déclenche un crash délibéré pour empêcher corruption des données. Contrairement aux paniques qui peuvent être récupérées en utilisant defer et recovery, ce crash est intentionnel et ne peut pas être intercepté.
Pour résoudre ce problème, évitez les écritures simultanées sur les cartes. Dans l'exemple fourni :
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 }
Les écritures simultanées sur la carte à partir de plusieurs goroutines violent les règles de concurrence de Go pour les cartes, provoquant un crash intentionnel.
Pour éviter ce crash et garantir l'intégrité des données, envisagez d'utiliser un mutex ou une primitive de synchronisation pour contrôler l'accès à la carte. Cela garantit qu'une seule goroutine peut modifier la carte à la fois.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!