我可以在非静态方法中使用lock
对象吗?另一方面,此代码是线程安全的吗?
static readonly object _object = new object();
public void Get()
{
lock (_object)
{
...
}
}
答案 0 :(得分:5)
以非静态方法锁定静态对象是可以的。静态对象仅表示该类型的所有实例都有一个单锁。
如果您使用类级别字段,则每个类型实例都具有一个锁。
选择哪种取决于您要保护的资源以防止并发访问。例如,如果您有一个静态资源(例如一个集合),那么保护该资源的锁也必须是静态的。
答案 1 :(得分:-4)
您可以改为使用this
来锁定:
lock (this)
{
}
锁定当前对象实例本身。