Sobes.tech
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.