Junior — Middle
È possibile eseguire una lettura concorrente dei dati da una slice in un linguaggio di programmazione?
sobes.tech AI
Risposta dell'AI
In Go, i slice sono tipi di riferimento che puntano a un array in memoria. La lettura concorrente di un slice è sicura se nessuno modifica il contenuto del slice o dell'array di base. Cioè, se più goroutine leggono solo i dati di un singolo slice senza scrivere, ciò non causerà condizioni di gara.
Tuttavia, se almeno una goroutine modifica gli elementi del slice e altre leggono o scrivono contemporaneamente, si verifica una condizione di gara e il comportamento non è definito.
Esempio di lettura concorrente sicura:
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()
Se devi leggere e scrivere contemporaneamente, devi usare meccanismi di sincronizzazione (ad esempio, mutex) o altri meccanismi di sicurezza.