Junior — Middle
Como podem eliminar as condições de corrida que surgem ao aceder simultaneamente a recursos num ambiente multithread?
sobes.tech IA
Resposta da IA
Para evitar condições de corrida em ambientes multithread em Go, podem ser utilizados vários métodos:
-
Mutexes (sync.Mutex) — bloqueiam o acesso a recursos partilhados, permitindo que apenas uma goroutine trabalhe com eles de cada vez.
-
Canais (channels) — permitem organizar uma troca segura de dados entre goroutines, evitando o acesso direto a variáveis comuns.
-
Pacote sync/atomic — fornece operações atômicas para trabalhar com tipos primitivos, ajudando a evitar condições de corrida em operações simples.
Exemplo com mutex:
import (
"sync"
)
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Uso de canais:
ch := make(chan int)
func worker() {
for val := range ch {
// processamento de val
}
}
func main() {
go worker()
ch <- 42
close(ch)
}
A escolha do método depende da tarefa específica e da estrutura do programa.