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

时间:2010-04-01 13:37:13

标签: c# .net 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();
    }
}

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

1 个答案:

答案 0 :(得分:6)

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

您也可以使用typeof(class) as the expression inside lock。但是,请参阅下面的警告,使用静态变量,它至少在您的班级中受到更多保护。