锁定非静态方法

  • 本文关键字:静态方法 锁定 c#
  • 更新时间 :
  • 英文 :


我可以在非静态方法中使用lock对象吗?另一方面,此代码是线程安全的吗?

static readonly object _object = new object();  
public void Get()  
{  
  lock (_object)  
  {  
    ...  
  }  
}

非静态方法中锁定静态对象是可以的。静态对象只是意味着该类型的所有实例都有一个锁。

如果使用类级别字段,则每个类型的实例都有一个锁。

选择哪一个取决于要保护的资源免受并发访问。例如,如果您有一个静态资源(例如,集合(,那么保护该资源的锁也必须是静态的。

您可以改用this来锁定:

lock (this)
{
}

以锁定当前对象实例本身。

最新更新