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.