Во время разработки многопоточного кода практически всегда встаёт проблема параллельного доступа к ресурсам. Благо у нас есть необходимый инструментарий для решения этой проблемы. Самым простым способом решения проблемы параллельного доступа к ресурсам являются блокировки. В большинстве разрабатываемых приложений этого достаточно. Но когда на первый план выходит производительность и быстрый отклик, то блокировки могут послужить одним из узких мест. Чтобы повысить производительность и избежать накладных расходов блокировок существуют различные подходы и алгоритмы. Самыми идеальными являются wait-free алгоритмы, но, к сожалению, на практике, ситуации в которых мы можем их использовать, встречаются довольно редко. В этом докладе рассмотрим основные алгоритмы lock-free многопоточности, поговорим о некоторых оптимизациях компилятора, а также сравним производительность lock-free и не lock-free многопоточного кода.