Действительно ли безопасно заблокировать статическую переменную в нестатическом классе?

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

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

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

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

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

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

9
задан Dario Solera 1 April 2010 в 13:37
поделиться

1 ответ

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

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

6
ответ дан 4 December 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: