Problèmes de concurrence dans Go : résolution de « Erreur fatale Golang : lecture et écriture de carte simultanées » dans Minecraft Server
Lorsque vous travaillez avec des cartes dans routines Go simultanées, il est crucial de résoudre les problèmes de concurrence pour éviter les erreurs fatales telles que « lecture et écriture de carte simultanées ». Voici des solutions potentielles à cette erreur :
1. Synchronisez l'accès à la carte avec sync.RWMutex
Pour les cas d'utilisation limités avec des opérations de lecture et d'écriture alternées, envisagez d'utiliser sync.RWMutex{} pour contrôler l'accès à la carte. Ceci est particulièrement utile si vous n'effectuez aucune boucle sur la carte.
var ( someMap = map[string]string{} someMapMutex = sync.RWMutex{} ) // Read value from the map someMapMutex.RLock() v, ok := someMap["key"] someMapMutex.RUnlock() // Write value to the map someMapMutex.Lock() someMap["key"] = "value" someMapMutex.Unlock()
2. Tirez parti de syncmap.Map
Vous pouvez également envisager d'utiliser syncmap.Map{} à partir du package "sync". Contrairement aux cartes classiques, les syncmaps gèrent la simultanéité en interne, ce qui les rend intrinsèquement sûres pour un accès simultané, en particulier pendant les itérations :
var ( someMap = syncmap.Map{} ) // Read value from the map v, ok := someMap.Load("key") // Iterate over all keys in a concurrent-safe manner someMap.Range(func(key, value interface{}) bool { val, ok := value.(string) if ok { fmt.Println(key, val) } return true })
Conseils supplémentaires :
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!