Sobes.tech
Junior — Middle

Kas erinevad niidid saavad samaaegselt suhelda sama mälu aadressiga?

sobes.tech AI

Vastus AI-lt

Jah, Go-s võivad erinevad gorutined (niidid) samaaegselt pääseda samaaegselt sama mälu aadressile. Kuid see võib viia võistlusolukordadeni (race conditions), kui juurdepääs ei ole sünkroniseeritud. Turvalise suhtluse jaoks jagatud mäluga kasutatakse sünkroniseerimismehhanisme, nagu mutexid (sync.Mutex), kanalid (chan) või sync/atomic paketi atomaarseid operatsioone.

Näide mutexi kasutamisest jagatud muutuja kaitsmiseks:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    counter++
    mu.Unlock()
}

Ilma nende meetmeteta võib samaaegne juurdepääs põhjustada programmi ettearvamatut käitumist.