Therac-25!
Os desenvolvedores do projeto Therac-25 estavam bastante confiantes sobre o tempo entre uma interface do usuário e um problema relacionado à interface em uma máquina terapêutica XRAY.
Eles não deveriam ter sido.
Você pode aprender mais sobre esse famoso desastre de software de vida ou morte em:
http://www.youtube.com/watch?v=izGSOsAGIVQ
ou
http://en.wikipedia.org/wiki/Therac-25
Seu aplicativo pode ser muito menos sensível a falhas do que os dispositivos médicos. Um método útil é classificar a exposição ao risco como o produto da probabilidade de ocorrência e o custo da ocorrência ao longo da vida útil do produto para todas as unidades que poderiam ser produzidas.
Se você optou por construir seu código para durar (e parece que você tem), considere a lei de Moore que pode facilmente cortar vários zeros a cada poucos anos, à medida que os computadores dentro ou fora do sistema ficam mais rápidos. Se você enviar milhares de cópias, corte mais zeros. Se os usuários fizerem essa operação diariamente (ou mensalmente) por anos, tire mais alguns. Se for usado onde a fibra do Google estiver disponível, o que acontecerá? Se o lixo da interface do usuário coletar a operação da GUI no meio, isso afeta a corrida? Você está usando uma biblioteca Open Source ou Windows atrás da sua GUI? As atualizações podem afetar o tempo?
Semáforos, bloqueios, mutexes, sincronização de barreira estão entre as maneiras de sincronizar as atividades entre os threads. Potencialmente, se você não os estiver usando, outra pessoa que mantém seu programa pode, e então rapidamente, suposições sobre relacionamentos entre encadeamentos podem mudar e o cálculo sobre a condição de corrida pode ser invalidado.
Eu recomendo que você sincronize explicitamente porque, embora você possa nunca vê-lo criar um problema, um cliente pode. Além disso, mesmo que sua condição de corrida nunca ocorra, e se você ou sua organização forem chamados a tribunal para defender seu código (como a Toyota estava relacionada ao Prius há alguns anos). Quanto mais completa sua metodologia, melhor você se sairá. Pode ser melhor dizer "nos protegemos contra esse caso improvável como esse ..." do que dizer "sabemos que nosso código falhará, mas escrevemos essa equação para mostrar que não acontecerá em nossa vida. Provavelmente. "
Parece que o cálculo de probabilidade vem de outra pessoa. Eles conhecem o seu código e você o conhece o suficiente para confiar que nenhum erro foi cometido? Se eu calculei uma confiabilidade de 99,999997% para alguma coisa, também devo pensar nas aulas de estatística da faculdade e lembrar que nem sempre recebi 100% e recuo alguns percentuais em minhas próprias estimativas de confiabilidade pessoais.