Sobes.tech
Junior — Middle

É possível fazer leitura concorrente de um slice na linguagem de programação?

sobes.tech IA

Resposta da IA

Em Go, os slices são tipos de referência que apontam para um array na memória. A leitura concorrente de um slice é segura se ninguém modificar o conteúdo do slice ou do array base. Ou seja, se várias goroutines apenas leem dados de um mesmo slice sem escrever, isso não causará condições de corrida.

No entanto, se pelo menos uma goroutine modificar os elementos do slice, e outras lerem ou escreverem ao mesmo tempo, ocorre uma condição de corrida e o comportamento não é definido.

Exemplo de leitura concorrente 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()

Se precisar ler e escrever ao mesmo tempo, deve usar mecanismos de sincronização (por exemplo, mutex) ou outros mecanismos de segurança.