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