Junior — Middle
Comment la gestion de la pile est-elle implémentée dans un environnement multithread?
sobes.tech IA
Réponse de l'IA
En Go, le travail avec le tas (heap) dans un environnement multithread est réalisé à l’aide du ramasse-miettes intégré et du planificateur de goroutines. Le tas est une zone de mémoire où sont placés des objets dynamiques, et l’accès à celle-ci peut se faire depuis différentes goroutines.
Pour un travail sécurisé avec le tas, Go utilise :
- Ramasse-miettes (GC), qui libère automatiquement la mémoire inutilisée, évitant ainsi les fuites.
- Mutex et autres primitives de synchronisation (du package sync), si une protection explicite de l’accès aux données partagées dans le tas est nécessaire.
Exemple : si plusieurs goroutines accèdent à une structure de données partagée stockée dans le tas, il faut utiliser sync.Mutex pour éviter les conditions de course :
var mu sync.Mutex
var sharedData = make(map[string]int)
func writeData(key string, value int) {
mu.Lock()
defer mu.Unlock()
sharedData[key] = value
}
func readData(key string) int {
mu.Lock()
defer mu.Unlock()
return sharedData[key]
}
Ainsi, Go assure la sécurité lors du travail avec le tas via le ramasse-miettes et fournit des outils pour la synchronisation si nécessaire.