Junior — Middle
Kako se implementira rad sa stekom u višestrukom okruženju?
sobes.tech АИ
Одговор од АИ
U Go, rad sa hrpom (heap) u višestrukom okruženju implementira se pomoću ugrađenog sakupljača smeća i planera gorutina. Hrp je oblast memorije gde se smeštaju dinamički objekti, a pristup toj oblasti može se vršiti iz različitih gorutina.
Za siguran rad sa hrpom, Go koristi:
- Sakupljač smeća (GC), koji automatski oslobađa neiskorišćenu memoriju, sprečavajući curenje memorije.
- Mutekse i druge primitivne alate za sinhronizaciju (iz paketa sync), ako je potrebno eksplicitno zaštititi pristup zajedničkim podacima smeštenim u hrpi.
Primer: ako više gorutina pristupa zajedničkoj strukturi podataka smeštenoj u hrpi, potrebno je koristiti sync.Mutex da bi se sprečile trke:
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]
}
Na ovaj način, Go obezbeđuje sigurnost rada sa hrpom putem sakupljača smeća i pruža alate za sinhronizaciju po potrebi.