Сам оператор блокировки на самом деле является неким синтаксическим сахаром, который создает объект Monitor и управляет им.
Само по себе это обычно не слишком ресурсоемко, но может стать проблемой, если у вас есть несколько операций чтения, но нет записи в вашу переменную в нескольких потоках. Каждое чтение должно ждать окончания другого, прежде чем чтение может завершиться. В сценариях, где вы можете получать переменную из нескольких потоков, но не устанавливаете ее, вам может потребоваться использовать объект ReaderWriterLockSlim для управления асинхронным чтением и записью.