Sobes.tech
Junior — Middle

Je možné vykonávať súbežné čítanie údajov zo slice v programovacom jazyku?

sobes.tech AI

Odpoveď od AI

V jazyku Go sú slices referenčné typy, ktoré ukazujú na pole v pamäti. Súčasné čítanie zo slice je bezpečné, ak nikto nemení obsah slice alebo základného poľa. Inými slovami, ak niekoľko gorútin iba čítajú dáta z rovnakého slice bez zápisu, nedôjde ku konfliktom.

Avšak, ak aspoň jedna gorutina mení prvky slice a iné ich čítajú alebo zapisujú súčasne, vznikne race condition a správanie nie je definované.

Príklad bezpečného súčasného čítania:

slice := []int{1, 2, 3, 4, 5}
var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    fmt.Println(slice[0])
}()
go func() {
    defer wg.Done()
    fmt.Println(slice[1])
}()
wg.Wait()

Ak je potrebné čítať a zapisovať súčasne, je nutné použiť synchronizačné mechanizmy (napríklad mutex) alebo iné bezpečnostné prostriedky.