Да, я обычно блокирую новый объект, созданный специально для этой цели. Я также удостоверяюсь, что он является частным и статическим, а не объектом Type. Также важно понимать, что вы на самом деле не «блокируете» переменную или объект, а используете блокировку в качестве токена, который предотвращает выполнение блока кода в нескольких потоках.
Блокировка на this
(текущий экземпляр, если вы используете C #) менее предпочтительна, поскольку любой код, имеющий доступ к экземпляру, может заблокировать его, увеличивая вероятность тупика. Создав собственный объект блокировки, вы полностью контролируете себя.
Вот информативная статья о блокировке, которая объясняет причины некоторых из этого.