Junior — Middle
¿Se puede realizar lectura competitiva de datos desde un segmento en un lenguaje de programación?
sobes.tech AI
Respuesta de la IA
En Go, los slices son tipos de referencia que apuntan a un array en memoria. La lectura concurrente de un slice es segura si nadie modifica el contenido del slice o del array base. Es decir, si varias goroutines solo leen datos de un mismo slice sin escribir, esto no provocará condiciones de carrera.
Sin embargo, si al menos una goroutine modifica los elementos del slice, y otras leen o escriben al mismo tiempo, se produce una condición de carrera y el comportamiento no está definido.
Ejemplo de lectura concurrente segura:
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 necesitas leer y escribir al mismo tiempo, debes usar mecanismos de sincronización (por ejemplo, mutex) u otros mecanismos de seguridad.