CLR поддерживает один экземпляр каждого типа для каждого домена приложений (и, как указывает Джо в своем ответе, иногда они даже используются в более широком контексте).
Поскольку вы не контролируете доступ к типам, вы можете непреднамеренно заблокировать или заблокировать совершенно не связанный код, который также блокирует ваш тип.
Вместо этого вы обычно должны блокировать частные экземпляры , которые находятся в том же классе, что и операция (или связанные операции), которую вы хотите заблокировать, чтобы вы могли контролировать, что блокировка влияет и блокирует. (Хотя бывают также случаи, когда имеет смысл заблокировать какой-либо известный объект синхронизации, который предназначен для использования в разных объектах.)