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