Sobes.tech
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.