Maison > développement back-end > Golang > Comment puis-je empêcher les plantages d'écriture de carte simultanée dans Go ?

Comment puis-je empêcher les plantages d'écriture de carte simultanée dans Go ?

Patricia Arquette
Libérer: 2024-12-14 01:58:09
original
187 Les gens l'ont consulté

How Can I Prevent Concurrent Map Write Crashes in Go?

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal