Junior — Middle
Különböző szálak egyidejűleg tudnak-e ugyanazzal a memória címmel interakcióba lépni?
sobes.tech MI
Válasz az MI-től
Igen, Go-ban különböző goroutine-ok (szálak) egyidejűleg hozzáférhetnek ugyanahhoz a memória címhez. Ez azonban versenyhelyzetekhez (race conditions) vezethet, ha a hozzáférés nincs szinkronizálva. A megosztott memória biztonságos kezeléséhez szinkronizációs mechanizmusokat használnak, például mutexeket (sync.Mutex), csatornákat (chan) vagy az sync/atomic csomag atomikus műveleteit.
Példa egy mutex használatára a közös változó védelmében:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
counter++
mu.Unlock()
}
Ezek nélkül a lépések nélkül a párhuzamos hozzáférés kiszámíthatatlan viselkedést eredményezhet a programban.