Junior — Middle
Peut-on effectuer une lecture concurrente de données à partir d'une tranche dans un langage de programmation?
sobes.tech IA
Réponse de l'IA
En Go, les slices sont des types de référence qui pointent vers un tableau en mémoire. La lecture concurrente d’un slice est sûre si personne ne modifie le contenu du slice ou du tableau de base. Autrement dit, si plusieurs goroutines lisent uniquement les données d’un même slice sans écrire, cela ne provoquera pas de conditions de course.
Cependant, si au moins une goroutine modifie les éléments du slice, et que d’autres lisent ou écrivent en même temps, une condition de course se produit et le comportement n’est pas défini.
Exemple de lecture concurrente sûre :
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()
Si vous devez lire et écrire en même temps, utilisez la synchronisation (par exemple, un mutex) ou d’autres mécanismes de sécurité.