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 XRAY terapêutica.
Eles não deveriam ter sido.
Você pode aprender mais sobre esse famoso desastre de software de vida e morte em:
link
ou
link
Seu aplicativo pode ser muito menos sensível a falhas do que os dispositivos médicos. Um método útil é avaliar a exposição ao risco como o produto da probabilidade de ocorrência e o custo de ocorrência durante a 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), você deve considerar a lei de Moore que pode facilmente eliminar 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, elimine mais zeros. Se os usuários fizerem essa operação diariamente (ou mensalmente) por anos, retire mais alguns. Se for usado onde a fibra do Google está disponível, então? Se o lixo da interface do usuário coleta a operação média da GUI, isso afeta a corrida? Você está usando uma biblioteca Open Source ou Windows por trás de sua GUI? As atualizações podem afetar o tempo?
Semáforos, bloqueios, exclusões mútuas, sincronização de barreira estão entre as formas de sincronizar atividades entre os encadeamentos. Potencialmente, se você não estiver usando-os, outra pessoa que mantém seu programa pode e, muito rapidamente, suposições sobre relacionamentos entre threads 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 ver isso criando 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 à Justiça para defender seu código (como a Toyota estava relacionada ao Prius há alguns anos atrás). Quanto mais meticulosa for sua metodologia, melhor você se sairá. Pode ser melhor dizer "nós nos protegemos contra esse caso improvável como este ..." do que dizer "sabemos que nosso código falhará, mas escrevemos essa equação para mostrar que isso não acontecerá em nossa vida. Provavelmente. "
Parece que o cálculo da probabilidade vem de outra pessoa. Eles conhecem seu código e você os conhece o suficiente para confiar que nenhum erro foi cometido? Se eu calculasse uma confiabilidade de 99,99997% para algo, eu também poderia pensar em minhas aulas de estatística da faculdade e lembrar que nem sempre obtive 100%, e recuo um pouco em minhas próprias estimativas de confiabilidade pessoal.