Sobes.tech
Junior — Middle

Ako je implementovaná práca s zásobníkom v viacvláknovom prostredí?

sobes.tech AI

Odpoveď od AI

V Go je práca s haldou (heap) v prostredí s viacerými vláknami realizovaná pomocou vstavaného zberača odpadkov a plánovača gorútin. Haldy sú oblasťou pamäte, kde sa umiestňujú dynamické objekty, a k nej môže pristupovať z rôznych gorútin.

Pre bezpečnú prácu s haldou Go používa:

  • Zberač odpadkov (GC), ktorý automaticky uvoľňuje nepoužívanú pamäť, čím zabraňuje únikom.
  • Mutexy a ďalšie primitives synchronizácie (z balíka sync), ak je potrebné explicitne chrániť prístup ku zdieľaným dátam uloženým v halde.

Príklad: ak viaceré gorutiny pristupujú ku spoločnej štruktúre dát uložené v halde, je potrebné použiť sync.Mutex, aby sa predišlo súťažiam:

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]
}

Týmto spôsobom Go zabezpečuje bezpečnosť práce s haldou pomocou zberača odpadkov a poskytuje nástroje na synchronizáciu podľa potreby.