Therac-25!
Die Entwickler des Therac-25-Projekts waren ziemlich zuversichtlich, was das Timing zwischen einer Benutzeroberfläche und einem Schnittstellenproblem in einem therapeutischen XRAY-Gerät angeht.
Sie sollten nicht gewesen sein.
Weitere Informationen zu dieser berühmten Software-Katastrophe auf Leben und Tod finden Sie unter:
http://www.youtube.com/watch?v=izGSOsAGIVQ
oder
http://en.wikipedia.org/wiki/Therac-25
Ihre Anwendung ist möglicherweise weniger störanfällig als medizinische Geräte. Eine hilfreiche Methode besteht darin, das Risikoengagement als das Produkt der Eintrittswahrscheinlichkeit und der Eintrittskosten über die Lebensdauer des Produkts für alle Einheiten zu bewerten, die produziert werden könnten.
Wenn Sie sich dafür entschieden haben, Ihren Code für die Ewigkeit zu erstellen (und das hört sich so an, als ob Sie es getan hätten), sollten Sie das Moore-Gesetz in Betracht ziehen, das alle paar Jahre leicht mehrere Nullen abschaffen kann, wenn Computer innerhalb oder außerhalb Ihres Systems schneller werden. Wenn Sie Tausende von Kopien versenden, entfernen Sie weitere Nullen. Wenn Benutzer diesen Vorgang jahrelang täglich (oder monatlich) ausführen, nehmen Sie ein paar mehr mit. Wenn es verwendet wird, wo Google Fiber verfügbar ist, was dann? Beeinträchtigt das Rennen, wenn der Benutzeroberflächenmüll einen mittleren GUI-Betrieb erfasst? Verwenden Sie eine Open Source- oder Windows-Bibliothek hinter Ihrer GUI? Können Updates dort das Timing beeinflussen?
Semaphoren, Sperren, Mutexe und Barrier-Synchronisation gehören zu den Möglichkeiten, um Aktivitäten zwischen Threads zu synchronisieren. Wenn Sie sie nicht verwenden, kann sich möglicherweise eine andere Person, die Ihr Programm verwaltet, und dann ziemlich schnell die Annahme über die Beziehungen zwischen Threads verschieben, und die Berechnung über die Racebedingung wird möglicherweise ungültig.
Ich empfehle, dass Sie explizit synchronisieren, da ein Kunde möglicherweise ein Problem hat, obwohl Sie es nie bemerken. Auch wenn Ihr Rennzustand niemals eintritt, was ist, wenn Sie oder Ihre Organisation vor Gericht gestellt werden, um Ihren Code zu verteidigen (da Toyota vor einigen Jahren mit dem Prius verwandt war). Je gründlicher Ihre Methodik ist, desto besser werden Sie abschneiden. Es ist vielleicht besser zu sagen, "wir schützen uns vor diesem unwahrscheinlichen Fall wie diesem ..." als zu sagen, "wir wissen, dass unser Code scheitern wird, aber wir haben diese Gleichung aufgeschrieben, um zu zeigen, dass es in unserem Leben nicht passieren wird. Wahrscheinlich. "
Es klingt so, als ob die Wahrscheinlichkeitsberechnung von jemand anderem stammt. Kennen sie Ihren Code und kennen Sie sie genug, um darauf zu vertrauen, dass kein Fehler gemacht wurde? Wenn ich für etwas eine Zuverlässigkeit von 99,99997% errechnete, könnte ich auch an meine Statistikkurse am College zurückdenken und mich daran erinnern, dass ich nicht immer 100% erreicht habe und mich bei meinen persönlichen Zuverlässigkeitsschätzungen um einige Prozent verschlechtert habe.