Блокировка, которую вы используете, зависит от вашей платформы, но, как правило, представляет собой мьютекс. В Windows вы бы использовали критическую секцию, а в .NET - монитор. Я не очень знаком с механизмами блокировки на других платформах. Я бы держался подальше от замков без подходов. Их очень сложно правильно запрограммировать, и прирост производительности зачастую не так велик, как можно было бы ожидать.
Блокировки становятся узким местом в вашей программе, когда они находятся в состоянии сильной конкуренции. То есть все очень большое количество потоков пытаются получить блокировку одновременно. Это приводит к напрасной потере циклов ЦП, поскольку потоки блокируются, и ОС тратит все большую часть своего времени на переключение между потоками. Такая проблема чаще всего проявляется в мире серверов. Для настольных приложений редко, когда блокировки вызывают проблемы с производительностью.