Если вы думаете об использовании:
блокировка (это)
Вы должны знать это, потому что вы смотрите на свой экземпляр, пользователи вашего
класс также может запереть его и облажаться. Является ли это
Проблема зависит от того, что, по вашему мнению, могут сделать ваши пользователи. Та же ситуация
существует, если вы делаете:
блокировка (TypeOf (MyClass))
Если вы не хотите этого делать, вы можете легко выделить статический или экземпляр
объект (т.е. объект myLock = new object ()), а затем заблокировать его.
Источник
Что касается блокировки на ссылочный тип против типа значения , этот ТАК вопрос о блокировке ресурса при получении ... имеет ответ:
Это зависит от типа - если
тип ссылки тогда да, если значение
введите номер Это также, почему вы должны
никогда, никогда не блокировать тип значения, так как
тип значения будет в штучной упаковке и любой
последующие попытки зафиксировать это
значение фактически приобретет блокировку на
другой объект.
Определение оператора блокировки:
Заявление о блокировке (C # Reference)
Ключевое слово lock отмечает оператор
блок как критический раздел
получение блокировки взаимоисключения
для данного объекта, выполняя
заявление, а затем выпустив
блокировка.
Этот ТАК вопрос о ключевом слове блокировки в C # может помочь. Вы также можете посмотреть на Почему блокировка () не разрешена, но разрешена Monitor.Enter ()?
Спецификация для компилятора определяет поведение блокировки следующим образом: :
Тип времени компиляции
выражение оператора блокировки должно
быть ссылочным типом или> типом
параметр (§25.1.1), известный как
ссылочный тип. Это время компиляции
ошибка для типа времени компиляции
выражение для обозначения типа значения.