Digite para filtrar os verbetes do Glossário.

    Banco de dados · Developer Workspace

    O que é Condição de corrida?

    Condição de corrida acontece quando duas operações disputam o mesmo recurso e o resultado depende da ordem. Entenda a disputa, a restrição e a conferência.

    Também chamado de: race condition, disputa de gravação, corrida crítica

    O que é condição de corrida

    Condição de corrida acontece quando duas ou mais operações disputam o mesmo recurso e o resultado depende da ordem de conclusão delas. Cada tentativa parece correta quando executada isoladamente, mas a combinação produz um efeito indevido.

    O caso clássico é a leitura seguida de gravação. Uma operação consulta o estado, decide com base no que leu e grava. Se outra operação faz o mesmo no intervalo entre a leitura e a gravação, as duas escolhas se baseiam em uma informação que deixou de valer.

    Consulta seguida de gravação

    Considere um sistema de reserva de salas com horários fixos. A aplicação consulta se a sala está livre às dez e, em seguida, registra a ocupação. Uma tentativa isolada conclui as duas etapas e mostra a confirmação na tela.

    Duas solicitações podem realizar a consulta enquanto o horário ainda está livre. Ambas recebem uma resposta positiva e tentam gravar a ocupação. O resultado depende de como a implementação e o banco tratam essa disputa, e não da aparência do formulário.

    A restrição que impede a duplicação

    A correção não está em confiar na consulta anterior, e sim em impedir a gravação conflitante. Uma restrição de unicidade no banco, combinada com o tratamento do erro na aplicação, recusa a segunda tentativa mesmo quando as duas chegam juntas.

    Reservas por intervalos de duração exigem um cuidado maior, porque dois horários de início diferentes podem ocupar parte do mesmo período. Nesse caso, a verificação precisa considerar a sobreposição entre os intervalos, sem se limitar à igualdade do horário.

    Reproduzir a disputa no teste

    Um teste que executa as reservas em sequência não reproduz a disputa. Ele exercita a leitura de uma ocupação já registrada e pode passar mesmo em uma implementação que aceitaria duas gravações simultâneas.

    Para investigar, o cenário precisa acionar as solicitações ao mesmo tempo. O resultado esperado também precisa estar definido: uma confirmação e uma recusa preservam a única ocupação, enquanto duas confirmações mostram que a falha foi reproduzida. O teste de caixa-preta ajuda a comparar a resposta das duas tentativas e o estado gravado depois delas.

    Sinais de que a correção funcionou

    Depois da correção, execute novamente o cenário simultâneo e confira o registro final. O cliente cuja tentativa perdeu a disputa precisa receber uma explicação e conseguir escolher outro horário, sem receber apenas uma mensagem genérica de erro.

    O cancelamento também merece atenção, porque devolve um horário à disponibilidade. A transação e a atomicidade ajudam a garantir que a leitura e a gravação aconteçam de forma coerente. Para investigar a disputa e revisar a restrição aplicada, o Desenvolvimento Colaborativo da Dev Side Studio permite reproduzir o cenário durante a execução.

    Dúvidas frequentes

    Perguntas frequentes sobre Condição de corrida

    Condição de corrida é o mesmo que concorrência?
    Não. A [concorrência](/glossario/concorrencia/) descreve várias operações em andamento ao mesmo tempo. A condição de corrida é um efeito possível dessa concorrência, quando a ordem das operações altera o resultado final.
    Basta validar o formulário no navegador?
    Não. A verificação feita na tela não impede que duas chamadas cheguem ao servidor quase ao mesmo tempo. A proteção precisa existir onde a gravação acontece, para que a segunda tentativa seja recusada.
    Uma consulta antes de gravar resolve a disputa?
    Não sozinha. Duas tentativas podem consultar o recurso enquanto ele ainda está livre e gravar logo depois. A consulta informa o estado em um instante, e a gravação precisa confirmar que o recurso continua disponível no momento de ocupá-lo.
    Como reproduzir a disputa em um teste?
    O teste precisa exercitar as solicitações ao mesmo tempo, e não em sequência. Executar duas reservas uma após a outra verifica apenas a leitura de uma ocupação já gravada e pode passar mesmo em uma implementação que aceita duplicação.

    Para continuar

    Recursos relacionados

    Aplicação na formação

    Developer Workspace

    A condição de corrida mostra por que uma verificação feita só na interface não impede duas gravações conflitantes no banco.

    Conhecer a formação
    Capa da Formação Developer Workspace

    Fontes consultadas

    Referências deste verbete

    Este verbete ajudou você?

    Planos Promovaweb

    Tire seus projetos do papel

    O Plano Martech cobre automação e atendimento. O Plano IA Makers acrescenta desenvolvimento com IA, enquanto o Plano Founders trata de gestão de negócios. Todos são anuais.

    Plano Martech

    Para conectar automação, marketing e atendimento com infraestrutura própria.

    R$ 897

    R$ 597/ano

    • Grade de automação, atendimento, marketing e análise de indicadores
    • Instalador Exclusivo Promovaweb
    • n8n, Evolution API, Chatwoot e Mautic
    • Trilha DevOps incluída
    • Encontros ao vivo (terça e quinta)
    • Comunidade e acompanhamento
    Conhecer o plano

    Plano Founders

    Plano anual para fazer um projeto de tecnologia avançar, com 90 dias de mentoria intensiva. R$ 1.997 à vista ou até 10x de R$ 219 no cartão.

    R$ 1.997/ano

    • 12 meses de acesso ao Founders
    • 90 dias de mentoria intensiva, um encontro por dia útil
    • Dia de conteúdo (terça e quinta) e War Room (segunda, quarta e sexta)
    • Encontro semanal em grupo após a fase intensiva
    • Formação Vibe Coding incluída no plano anual
    • Consultoria individual de até duas horas (bônus)
    Conhecer o plano