2010-04-01 147 views
9

我有一个管理共享资源的类。现在,由于对资源的访问依赖于许多参数,因此在正常执行程序期间,该类将被实例化并处理好几次。在非静态类中锁定静态变量是否安全?

共享资源不支持并发,所以需要某种锁定。那我脑子里浮现的第一件事情是有一个静态实例中的类,并且获取锁就可以了,就像这样:

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

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

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

这是否有意义,或者你会用另一种方法?

回答

6

是的,您可以使用静态变量来保护共享资源。您可以使用typeof(class) as the expression inside lock。尽管如此,请参阅下面的警告,使用静态变量,它至少可以更好地保护您的课堂。

+5

我不会锁定typeof(class),因为如果其他人锁定在同一类型上,可能会发生死锁。至少,不要使用公共类型。 – driis 2010-04-01 13:51:06

+1

@driis:同意,在答案中加了一个注释。谢谢。 – 2010-04-01 14:01:33

+2

对于“是的,你可以......”+1,对'typeof(class)'锁定的建议,-1,所以总数为0. – LukeH 2010-04-01 14:27:38