Остальные верны, что выбор использования статического поля экземпляра зависит от того, какое состояние (на уровне класса или на уровне экземпляра) вам необходимо заблокировать, и нет существенной разницы в скорости для самой блокировки. НО если вам действительно нужно использовать только данные экземпляра, тогда ваше приложение может работать намного быстрее, используя lock(this)
, вместо того, чтобы блокировать все потоки от доступа к данным ЛЮБОГО экземпляра. Это могло быть тем, к чему стремился интервьюер - в приложении, где несколько потоков используют только данные экземпляра, он действительно должен работать быстрее, если вы заблокируете экземпляр только потому, что он не будет блокировать использование другими экземплярами других потоков.
И наоборот, если потоки получают доступ к состоянию класса (статическому), вам нужно заблокировать их все одним объектом. Когда мне нужно это сделать, я использовал шаблон для блокировки типа класса следующим образом:
[Редактировать - в конце концов, это не очень хорошая идея, см. Комментарии ниже]
lock(typeof(MyClass))
{
// use class-level data
}
Это исключает необходимость создания поля статического объекта.