Выбор ответа Middle Потоки и синхронизация обновлено
На чём делать lock
Вопрос
Какой объект лучше использовать для lock?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Приватное поле readonly object sync = new();. Блокировать нужно объект, к которому не имеет доступа внешний код. this и typeof(...) доступны всем, и чужой код может заблокироваться на них же, создав дедлок.
Варианты ответа
- Приватное поле
readonly object _sync = new();правильный ответ this, чтобы блокировка была привязана к экземпляруtypeof(MyClass), чтобы блокировка была общей для всех- Строковую константу, например
lock ("orders")
Разбор
Блокировать нужно объект, к которому не имеет доступа внешний код. this и typeof(...) доступны всем, и чужой код может заблокироваться на них же, создав дедлок. Строковые литералы интернируются, и одна и та же строка может оказаться замком в разных частях программы. В .NET 9 появился тип System.Threading.Lock, lock с ним работает эффективнее.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.