Junior — Middle
Lehet-e párhuzamosan olvasni adatokat egy szeletből egy programozási nyelvben?
sobes.tech MI
Válasz az MI-től
Go nyelvben a szeletek (slices) olyan referencia típusok, amelyek egy memóriahelyen lévő tömbre mutatnak. A párhuzamos olvasás egy szeletből biztonságos, ha senki sem módosítja a szelet vagy az alap tömb tartalmát. Más szóval, ha több goroutine csak olvas egy közös szeletből írás nélkül, akkor ez nem vezet adatversenyhez.
Azonban, ha legalább egy goroutine módosítja a szelet elemeit, és mások ugyanakkor olvasnak vagy írnak, akkor adatverseny alakul ki, és a viselkedés nem meghatározott.
Biztonságos párhuzamos olvasás példája:
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()
Ha egyszerre olvasni és írni kell, akkor szinkronizációs mechanizmusokat (pl. mutex) vagy más biztonsági módszereket kell alkalmazni.