Sobes.tech
Junior — Middle

Is het mogelijk om gelijktijdig gegevens uit een slice te lezen in een programmeertaal?

sobes.tech AI

Antwoord van AI

In Go zijn slices referentietypen die wijzen naar een array in het geheugen. Gelijktijdig lezen uit een slice is veilig als niemand de inhoud van de slice of de onderliggende array wijzigt. Met andere woorden, als meerdere goroutines alleen gegevens uit één slice lezen zonder te schrijven, leidt dit niet tot racecondities.

Echter, als minstens één goroutine de elementen van de slice wijzigt en anderen lezen of schrijven tegelijkertijd, ontstaat er een race en is het gedrag ongedefinieerd.

Voorbeeld van veilige gelijktijdige lezing:

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()

Als je tegelijkertijd lezen en schrijven moet doen, gebruik dan synchronisatiemechanismen (bijvoorbeeld mutex) of andere beveiligingsmechanismen.