Race condition
Last updated
Last updated
Se nosso programa tem 2 threads que fazem uso de um recurso compartilhado (como memória ou até mesmo arquivo no disco), e o estado final do recurso compartilhado depende da ordem de execução das threads, então temos um problema de race condition, ou condição de corrida.
Condição de corrida é um problema devido ao uso de concorrência, pois não conseguimos determinar se e quando uma thread será executada.
Quando o recurso compartilhado for a memória do programa, e uma das threads estiver tentando fazer uma operação de escrita, podemos ter uma sub-categoria mais específica de race condition que é data race.
Data races são mais graves pois podem gerar corrupção na memória do programa, afetando seu funcionamento e até causando segmentation fault dependendo do caso. Para evitar data races, o uso correto de mutexes, semáforos ou barreiras deve ser levado em conta.
Sabendo dos problemas inerentes a concorrência, temos que ter em mente que, sempre que tivermos um cenário de race condition, precisamos sincronizar o acesso ao recurso.
E a sincronização precisa ser feita mediante a implementação de locks.