Решение 11 распространенных проблем в многопоточном коде - Пути достижения корректности

ОГЛАВЛЕНИЕ

Пути достижения корректности

Теперь, после того, как я перебрал проблемы одну за другой, можно сообщить хорошую новость: существуют шаблоны разработки, которым можно следовать, чтобы сделать многие из упомянутых проблем (особенно опасности, связанные с правильностью) куда более редкими. Корнем большинства проблем является то, что состояние является общим для нескольких потоков. Что еще хуже, этим состоянием можно свободно манипулировать, и оно превращается из согласованного в несогласованное, а затем (можно надеяться) обратно с удивительной регулярностью.

Поскольку разработчики пишут код для однопоточных программ, все это понятно. Общую память проще использовать как своего рода блокнот по мере продвижения к допустимой и завершающей точке назначения. Процедурные языки программирования в духе C работали подобным образом не один год.

Но с распространением одновременности за этими привычками необходимо следить. И здесь можно последовать примеру функциональных языков программирования, таких как Haskell, LISP, Scheme, ML и даже F# (новый язык, совместимый с .NET), принимая неизменность, чистоту и изоляцию как основные концепции разработки.