锁定非静态方法

时间:2019-04-14 14:16:19

标签: c#

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

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

2 个答案:

答案 0 :(得分:5)

以非静态方法锁定静态对象是可以的。静态对象仅表示该类型的所有实例都有一个单锁。

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

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

答案 1 :(得分:-4)

您可以改为使用this来锁定:

lock (this)
{

}

锁定当前对象实例本身。