Junior — Middle
Ar skirtingi srautai gali vienu metu sąveikauti su ta pačia atminties adresu?
sobes.tech AI
Atsakymas iš AI
Taip, Go skirtingos gorutinos (sriegių) gali vienu metu prieiti prie to paties atminties adreso. Tačiau tai gali sukelti lenktynių sąlygas (race conditions), jei prieiga nėra sinchronizuota. Saugi sąveika su bendro naudojimo atmintimi naudojant sinchronizacijos mechanizmus, tokius kaip mutexai (sync.Mutex), kanalai (chan) arba atomines operacijas iš paketo sync/atomic.
Pavyzdys, kaip naudoti mutexą, siekiant apsaugoti prieigą prie bendros kintamosios:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
counter++
mu.Unlock()
}
Be šių priemonių vienalaikis prieigos gali sukelti nenuspėjamą programos elgesį.