Junior — Middle
Cum se implementează lucrul cu stiva într-un mediu multi-thread?
sobes.tech AI
Răspuns de la AI
În Go, lucrul cu heap-ul într-un mediu multi-thread este realizat cu ajutorul colectorului de gunoi încorporat și al planificatorului de goroutines. Heap-ul este o zonă de memorie unde sunt plasate obiecte dinamice, iar accesul la acesta poate avea loc din diferite goroutines.
Pentru a lucra în siguranță cu heap-ul, Go utilizează:
- Colectorul de gunoi (GC), care eliberează automat memoria neutilizată, prevenind scurgerile de memorie.
- Mutex-uri și alte primitive de sincronizare (din pachetul sync), dacă este necesar să protejeze explicit accesul la datele comune plasate în heap.
Exemplu: dacă mai multe goroutines accesează o structură de date comună stocată în heap, trebuie folosit sync.Mutex pentru a preveni condițiile de cursă:
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]
}
Astfel, Go asigură siguranța lucrului cu heap-ul prin colectorul de gunoi și oferă instrumente pentru sincronizare după nevoie.