Sobes.tech
Junior — Middle

Quais métodos são utilizados para garantir a consistência dos dados ao trabalhar com múltiplas threads ou goroutines?

sobes.tech IA

Resposta da IA

Para garantir a coerência dos dados ao trabalhar com múltiplos threads ou goroutines em Go, utilizam-se os seguintes métodos:

  • Mutexes (sync.Mutex) — bloqueiam o acesso aos dados partilhados, permitindo que apenas um thread ou goroutine modifique os dados de cada vez.

  • Canais (channels) — permitem transmitir dados de forma segura entre goroutines, garantindo sincronização e troca de mensagens.

  • Pacote sync/atomic — fornece operações atômicas para trabalhar com tipos de dados primitivos sem bloqueios.

Exemplo de uso de um mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

Uso de canais para transmissão de dados:

ch := make(chan int)
go func() {
    ch <- 42
}()
value := <-ch

A escolha do método depende da tarefa específica e dos requisitos de desempenho e conveniência.