一个关于lock的问题
public class EntryIdCache
{
private static object _entriesLock = new object();
internal void Ensure(DataManager data)
{
lock(_entriesLock)
{
bool bLoaded = Load(data);
if (!bLoaded || _booting || ChangeNumber != data.CurrentEntryChangeCount)
{
_booting = false;
Build(data);
Save(data);
}
}
}
}
请问这个地方lock这个类里面的一个private static object 是什么意思 为什么不使用的lock他自己
------解决方案--------------------lock语句主要是为了实现多线程数据同步,如果lock对象自己,而对象是public的,所以可能存在不受控的代码访问该实例,从而造成死锁.
私有静态成员应该是所有实例内共享变量,这断代码就可以保证所有同时创建的EntryIdCache,同时只有一个线程执行Ensure方法.
------解决方案--------------------静态成员是多个实例共有的一个,所以当一个实例Lock这个静态成员,别的实例就不能取得控制权