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