使用声明为类字段的锁对象与本地范围有区别吗?
例如:在下面的例子中使用lockObject1或lockObject2有区别吗?
public class Test()
{
private Object lockObject1 = new Object();
public void FooBar()
{
lock(lockObject1)
{
//Thread safe area 1
}
var lockObject2 = new Object();
lock(lockObject2)
{
//Thread safe area 2
}
}
}
似乎大多数示例似乎总是对选定锁定对象的作用域的重要性不以为然。
请您参考如下方法:
本地锁对象不会真正提供任何线程安全,因为运行 FooBar 的多个线程将各自拥有自己的对象,而不是共享一个用于锁定的对象。 (遗憾的是,在我提出问题并及时更正之前,我已经在生产代码中看到了这个问题。)
