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.