Будьте внимательны, используя Lock-Free алгоритмы!
Не секрет, что Lock-Free алгоритмы и структуры данных существенно усложняют проект. Это подтверждается как моим собственным опытом, так и Core Guidelines (набором рекомендаций и правил по написанию кода на С++).
Следуя принципу Lock-Free, очень сложно реализовать код. Ещё сложнее его отладить и практически невозможно найти все баги, которые, как правило, всплывают только на проде.
Почему возникают сложности?
С моей точки зрения, технология до сих пор недостаточно изучена. Ситуацию усугубляет и то, что Lock-Free алгоритмы и структуры данных на практике используются достаточно редко. На самом деле, существует огромное количество тематических статей и видеороликов, но они настолько поверхностны, что, мягко говоря, не раскрывают всех нюансов.
К сожалению, до сих пор нет серьёзных работ, которые научили бы сообщество разработчиков С++ использовать эти самые Lock-Free приёмы. А те аналитические материалы, что существуют, слишком сложны для восприятия.
Что делать?
Я рекомендую по возможности хорошенько разобраться в теме, прежде чем использовать Lock-Free алгоритмы и структуры данных. Причём знать их всё-таки надо, так как в связи с развитием современной электроники потребность в технологиях типа Lock-Free возрастает. И вот здесь программист сталкивается с определёнными сложностями, ведь, как я уже говорил выше, материала много, и далеко не всегда он достаточно содержательный.
К сожалению, формат этой заметки не позволяет вместить в неё всё то, что необходимо знать о Lock-Free алгоритмах и структурах данных. Отдельные нюансы мы ещё проговорим в наших следующих заметках.
Кроме того, данной теме посвящён целый урок курса «Разработчик С++» в OTUS, поэтому если вы хотите получить актуальные знания в полном объёме, проходите вступительное тестирование и записывайтесь на занятия!