Безопасно ли блокировать статическую переменную в нестатическом классе? - PullRequest
9 голосов
/ 01 апреля 2010

У меня есть класс, который управляет общим ресурсом. Теперь, поскольку доступ к ресурсу зависит от многих параметров, этот класс создается и удаляется несколько раз во время нормального выполнения программы.

Общий ресурс не поддерживает параллелизм, поэтому необходима некоторая блокировка. Первое, что мне пришло в голову, - это иметь статический экземпляр в классе и получить на него блокировки, например:

// This thing is static!
static readonly object MyLock = new object();

// This thing is NOT static!
MyResource _resource = ...;

public DoSomeWork() {
    lock(MyLock) {
        _resource.Access();
    }
}

Имеет ли это смысл, или вы бы использовали другой подход?

1 Ответ

6 голосов
/ 01 апреля 2010

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

Вы также можете использовать typeof (класс) в качестве выражения внутри блокировки . См. Предупреждение ниже, хотя со статической переменной она как минимум более защищена внутри вашего класса.

...