Fallos del tipo CWE-366
18 resultadosCondição de corrida entre threads
Ocorre quando múltiplas threads acessam e modificam o mesmo recurso (variável, arquivo, conexão) sem sincronização adequada, causando comportamento imprevisível e potencialmente perigoso. O resultado depende da ordem de execução das threads, que é não-determinística e difícil de reproduzir.
Um servidor web mantém um contador de sessões ativas em uma variável compartilhada. Duas threads recebem requisições simultâneas, leem o valor 100, incrementam para 101 e escrevem de volta — resultado final é 101 em vez de 102. Em cenários críticos (controle de acesso, transferências), isso permite fraudes ou bypass de validações.
Use mecanismos de sincronização (locks, mutexes, semáforos) ao acessar recursos compartilhados, ou redesenhe para evitar compartilhamento — use estruturas thread-safe (AtomicInteger em Java, canais em Go) e operações atômicas. Revise todo acesso a estado mutável compartilhado em código multi-thread.