Comment assurer un accès sécurisé à la carte dans un environnement multithread ?
sobes.tech IA
Réponse de l'IA
En Go, pour accéder en toute sécurité à une carte (map) dans un environnement multithread, il est nécessaire d'utiliser la synchronisation, car map n'est pas une structure de données sûre pour les threads. La méthode la plus courante consiste à utiliser un mutex (sync.Mutex ou sync.RWMutex) pour bloquer l'accès lors de la lecture et de l'écriture.
Exemple avec sync.RWMutex :
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock() // verrouiller pour la lecture
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock() // verrouiller pour l'écriture
defer mu.Unlock()
m[key] = value
}
Il existe également en Go le type sync.Map, qui implémente une carte sûre pour les threads avec des optimisations pour les opérations de lecture fréquentes. Il peut être utilisé si une typification stricte n'est pas nécessaire et si la simplicité est souhaitée :
import "sync"
var m sync.Map
m.Store("key", 42) // écriture
value, ok := m.Load("key") // lecture
Ainsi, pour un accès sécurisé à une map dans un environnement multithread, utilisez des mutex ou sync.Map.