将静态变量锁定在非静态类中是否安全?

Dar*_*era 9 .net c# concurrency static locking

我有一个管理共享资源的类.现在,由于对资源的访问依赖于许多参数,因此在程序的正常执行期间,该类被实例化并被多次处理.

共享资源不支持并发,因此需要某种锁定.我想到的第一件事是在类中有一个静态实例,并在其上获取锁,如下所示:

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

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

public DoSomeWork() {
    lock(MyLock) {
        _resource.Access();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是否有意义,或者您会使用其他方法吗?

Bri*_*ndy 6

是的,您可以使用静态变量来保护共享资源.

您还可以使用typeof(class)作为锁定内的表达式.但请参阅下面的警告,使用静态变量,它至少在您的班级中受到更多保护.

  • 我不会锁定typeof(类),因为如果其他人锁定了同一类型,你可能会遇到死锁.至少,不要在公共类型上这样做. (5认同)
  • +1表示"是的你可以...",-1表示锁定`typeof(class)`的建议,因此汇总0. (2认同)