Middle — Middle+
Como pode identificar uma condição de corrida (Race Condition) num sistema?
sobes.tech IA
Resposta da IA
A condição de corrida (Race Condition) pode ser identificada das seguintes formas:
- Análise estática do código — procura por operações potencialmente inseguras com recursos partilhados.
- Testes dinâmicos com alta concorrência — executar várias goroutines ou threads que acedem simultaneamente a dados partilhados.
- Uso de ferramentas para detetar condições de corrida — em Go, existe um detector de corrida integrado que é executado com a bandeira
-race:
go run -race main.go
Ajuda a identificar locais onde há acesso concorrente à memória sem a devida sincronização.
- Registo e monitorização — análise de comportamentos instáveis e erros que podem indicar condições de corrida.
Exemplo de uso do detector de corrida:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
counter := 0
wg.Add(2)
go func() {
defer wg.Done()
counter++ // potencial condição de corrida
}()
go func() {
defer wg.Done()
counter++ // potencial condição de corrida
}()
wg.Wait()
fmt.Println(counter)
}
A execução com -race irá detectar uma condição de corrida na variável counter.