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