Junior — Middle
Lze v programovacím jazyce provádět konkurenční čtení dat ze slice?
sobes.tech AI
Odpověď od AI
V jazyce Go jsou slices referenční typy, které ukazují na pole v paměti. Současné čtení ze slice je bezpečné, pokud nikdo nemění obsah slice nebo základního pole. Jinými slovy, pokud několik gorutin pouze čte data ze stejného slice bez zápisu, nedojde ke konfliktům.
Nicméně, pokud alespoň jedna gorutina změní prvky slice a jiné je čtou nebo zapisují současně, vznikne race condition a chování není definováno.
Příklad bezpečného současného čtení:
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()
Pokud je potřeba současně číst i zapisovat, je nutné použít synchronizační mechanismy (například mutex) nebo jiné bezpečnostní prostředky.