Junior — Middle
Може ли се вршити конкуретно читање података из среза у програмском језику?
sobes.tech АИ
Одговор од АИ
U Go jeziku, slice-ovi su referentni tipovi koji ukazuju na niz u memoriji. Istovremeno čitanje sa slice-a je sigurno ako niko ne menja sadržaj slice-a ili osnovnog niza. Drugim rečima, ako više gorutina samo čitaju podatke iz istog slice-a bez pisanja, to neće dovesti do trkaćih uslova.
Međutim, ako bar jedna gorutina menja elemente slice-a, a druge čitaju ili pišu istovremeno, javlja se trka i ponašanje nije definisano.
Primer sigurnog istovremenog čitanja:
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()
Ako je potrebno istovremeno čitanje i pisanje, treba koristiti mehanizme za sinhronizaciju (npr. mutex) ili druge mehanizme sigurnosti.