Есть ли причина, по которой оператор блокировки в. NET может работать с любым объектом? - PullRequest
0 голосов
/ 12 апреля 2020

Оператор lock может быть применен к любому объекту в. NET:

object locker = new object();
lock (locker)
{
}

В результате каждый отдельный объект должен оставлять дополнительное пространство для связанных с блокировкой данные в его заголовке. Критический к производительности исполняющий код, который имеет дело с заголовками объекта, также более сложный и медленный.

Поскольку на самом деле заблокировано только очень небольшое количество объектов, это пространство и время обработки тратятся впустую. Разве не было бы лучше, если бы существовал специальный класс "Lock", который может быть целью блокировки?

Или есть ли веская причина, по которой желательно, чтобы каждый отдельный объект блокировался в. NET

...