Почему волшебство позволяет блокировать экземпляр System.Object иначе, чем блокировать конкретный тип экземпляра?

Я узнал о блокировке потоков и не нашел объяснения, почему создание типичного объекта System.Object, его блокировка и выполнение любых действий требуется во время блокировки обеспечивает безопасность резьбы?

Пример

object obj = new object()
lock (obj) {
  //code here
}

Сначала я подумал, что он просто используется в качестве заполнителя в примерах и предназначен для замены на Тип, с которым вы имеете дело. Но я нахожу такие примеры, как , как указывает Деннис Филлипс , похоже, не отличается от фактического использования экземпляра Object.

Возьмем пример необходимости обновления частного словаря, что делает блокировку экземпляра System.Object для обеспечения безопасности потоков, а не фактической блокировки словаря (я знаю, что блокировка словаря в этом случае может вызвать проблемы с синхронизацией) ? Что, если бы словарь был общедоступным?

//what if this was public?
private Dictionary someDict = new Dictionary();

var obj = new Object();
lock (obj) {
  //do something with the dictionary
}

9
задан Community 23 May 2017 в 11:48
поделиться