Выбор ответа Middle Потоки и синхронизация обновлено

На чём делать lock

Вопрос

Какой объект лучше использовать для lock?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Приватное поле readonly object sync = new();. Блокировать нужно объект, к которому не имеет доступа внешний код. this и typeof(...) доступны всем, и чужой код может заблокироваться на них же, создав дедлок.

Варианты ответа

  1. Приватное поле readonly object _sync = new();правильный ответ
  2. this, чтобы блокировка была привязана к экземпляру
  3. typeof(MyClass), чтобы блокировка была общей для всех
  4. Строковую константу, например lock ("orders")

Разбор

Блокировать нужно объект, к которому не имеет доступа внешний код. this и typeof(...) доступны всем, и чужой код может заблокироваться на них же, создав дедлок. Строковые литералы интернируются, и одна и та же строка может оказаться замком в разных частях программы. В .NET 9 появился тип System.Threading.Lock, lock с ним работает эффективнее.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме