Therac-25!
Разработчики проекта Therac-25 были довольно уверены в выборе времени между пользовательским интерфейсом и проблемой интерфейса в терапевтическом аппарате XRAY.
Они не должны были быть.
Вы можете узнать больше об этой известной программной катастрофе «жизнь и смерть» по адресу:
http://www.youtube.com/watch?v=izGSOsAGIVQ
или же
http://en.wikipedia.org/wiki/Therac-25
Ваше приложение может быть гораздо менее чувствительным к сбоям, чем медицинские устройства. Полезным методом является оценка подверженности риску как продукта вероятности возникновения и стоимости возникновения в течение срока службы продукта для всех единиц, которые могут быть произведены.
Если вы решили построить свой код так, чтобы он работал долго (и это звучит так, как будто вы это сделали), вам следует учитывать закон Мура, который может легко отбрасывать несколько нулей каждые несколько лет, поскольку компьютеры внутри или вне вашей системы работают быстрее. Если вы отправите тысячи копий, отбросьте больше нулей. Если пользователи выполняют эту операцию ежедневно (или ежемесячно) в течение многих лет, отнимите еще несколько. Если он используется там, где доступно волокно Google, что тогда? Если мусор UI собирает середину работы GUI, это влияет на гонку? Вы используете библиотеку с открытым исходным кодом или Windows за вашим графическим интерфейсом? Могут ли обновления там повлиять на время?
Семафоры, блокировки, мьютексы, барьерная синхронизация являются одними из способов синхронизации действий между потоками. Потенциально, если вы их не используете, другой человек, который поддерживает вашу программу, может, а затем довольно быстро предположить, что отношения между потоками могут измениться, и вычисление о состоянии гонки может быть признано недействительным.
Я рекомендую вам явно синхронизировать, потому что, хотя вы, возможно, никогда не увидите, что это создает проблему, клиент может. Кроме того, даже если состояние вашей гонки никогда не наступит, что делать, если вы или ваша организация вызваны в суд для защиты вашего кода (поскольку Toyota была связана с Prius несколько лет назад). Чем тщательнее методология, тем лучше. Возможно, было бы лучше сказать «мы защищаемся от такого маловероятного случая, как этот ...», чем сказать «мы знаем, что наш код потерпит неудачу, но мы записали это уравнение, чтобы показать, что этого не произойдет при нашей жизни. Вероятно. "
Похоже, что расчет вероятности исходит от кого-то еще. Знают ли они ваш код, и знаете ли вы их достаточно, чтобы поверить, что ошибки не было? Если бы я вычислил надежность 99,99999% для чего-то, я мог бы также вспомнить свои занятия по статистике в колледже и вспомнить, что я не всегда получал 100%, и отбросил немало процентов на мои собственные оценки надежности.