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

 Самые легкие блокировки используют специальное предложение, сравнивают/обменивают инструкцию проверить, взята ли блокировка, и если это не, они вводят блокировку в единственное атомное действие. К сожалению, эта специальная инструкция является относительно дорогой (обычно десять к сотням времен дольше, чем обычная инструкция). Есть две главных причины для этого расхода, и они оба имеют отношение к проблемам, возникающим на истинной системе мультиобработчика.
Первая причина состоит в том, что сравнить/обменять инструкция должна удостовериться, что никакой другой обработчик также не пытается сделать ту же вещь. Существенно, это требует, чтобы один обработчик координировал со всеми другими обработчиками в системе. Это - медленная работа и составляет ниже связанный из стоимости блокировки (десятки циклов). Другой причиной расхода является коммуникация межпроцесса эффекта, имеет на системе памяти. После того, как блокировка была взята, программа, очень вероятно, получит доступ к памяти, которая, возможно, была недавно изменена другой нитью. Если эта нить бежала на другом обработчике, необходимо удостовериться, что все ожидание пишет на всех других обработчиках, смылись так, чтобы текущий поток видел обновления. Стоимость выполнения этого в основном зависит от того, как система памяти работает и сколько пишет потребность, которая смоется. Эта стоимость может быть довольно высокой в худшем случае (возможно сотни циклов или больше).
Таким образом стоимость блокировки, может быть значительным. Если часто называемый метод должен взять блокировку и только выполняет приблизительно сто инструкций, блокировка наверху, вероятно, будет проблемой. Программа обычно должна быть перепроектирована так, чтобы блокировка могла быть проведена для большей единицы работы.
В дополнение к сырью наверху ввода и отъезда блокировок, когда число обработчиков в системе растет, блокировки становятся главным препятствием в использовании всех обработчиков эффективно. Если есть слишком мало блокировок в программе, невозможно заставить всех обработчиков напряженно трудиться, так как они ждут на памяти, которая заблокирована другим обработчиком. С другой стороны, если есть много блокировок в программе, просто иметь "горячую" блокировку, которая вводится и выходится часто многими обработчиками. Это заставляет смывание памяти наверху быть очень высоким, и производительность снова не измеряет линейно с числом обработчиков. Единственный дизайн, который измеряет хорошо, является тем, в котором нити работника могут выполнить значительную работу, не взаимодействуя с общими данными.
Неизбежно, проблемы производительности могли бы заставить требовать избежать блокировок в целом. Это может быть сделано при определенных ограниченных обстоятельствах, но выполнение его правильно включает еще больше тонкости, чем получение взаимного исключения правильные блокировки использования. Это должно только использоваться как последнее прибежище, и только после понимания включенных проблем. Я буду посвящать полную статью этому в будущей проблеме.