Десять лет назад только ужасные программисты систем волновались о запутанности написания правильного кода в присутствии нескольких нитей выполнения.

 Большинство программистов придерживалось последовательных программ, чтобы избежать проблемы в целом. Теперь, однако, машины мультиобработчика становятся банальными. Скоро, программы, которые не мультипронизываются, будут находиться в невыгодном положении, потому что они не будут использовать значительную часть доступной вычислительной мощности.
К сожалению, написание правильных, мультипереплетенных программ не просто. Программисты просто не приучены к идее, что другие нити могли бы изменять память из нижней части их. Хуже, когда ошибка будет сделана, программа будет продолжать работать большую часть времени. Только под напряженным (производство) обусловливают, будет декларация ошибок, и только редко там будет достаточно информации при неспособности эффективно отладить применение. Рисунок 1 суммирует важные различия между последовательными и мультипереплетенными программами. Как это показывает, это действительно платит, чтобы добраться, мультипронизывавшие программы исправляются в первый раз.
   Особенности рисунка 1 последовательных и мультипронизывавших программ

Последовательные программы мультипронизывали программы
Может только использовать единственного обработчика, Может использовать в своих интересах аппаратные средства мультиобработчика
Поведением является обычно детерминированное Поведение, обычно недетерминировано
Тестирование, которое покрывает весь код, находит, что одного только большая часть Кодового покрытия ошибок недостаточна; нити, мчащиеся, чтобы получить доступ к памяти, вызывают самые проблематичные ошибки
Первопричины для неспособности найдены, тщательно проследив выполнение, которое приводит к Первопричинам неспособности, найдены, постулируя гонку, которая соответствует поведению и систематически рассмотрению кода по возможным причинам
После того, как идентифицированный, находя исправление для ошибки обычно гарантирован, что первопричина для гонки может легко остаться неопознанной
У меня есть три цели в этой статье. Во-первых, я покажу, что мультипереплетенные программы не являются настолько тайными. Фундаментальное требование для написания правильных программ является тем же, последовательна ли программа или мультипереплетена: весь код в программе должен защитить любые инварианты, которых требуют другие части программы. Во-вторых, я покажу, что, в то время как этот принцип достаточно прост, сохранение инвариантов программы является намного более трудным в мультипереплетенном случае. У примеров, которые тривиальны в последовательной среде, есть удивительная тонкость в мультипереплетенной среде. Наконец, я также покажу, как иметь дело с тонкими проблемами, которые могут вползти в мультипереплетенные программы. Это руководство составляет стратегии того, чтобы быть очень методическим о защите инвариантов программы, который, поскольку таблица в рисунке 2 показывает, более сложен в мультипереплетенном случае. Есть много причин, что это более сложно при использовании мультипронизывания, и я объясню их в следующих разделах.