日期:2014-05-20  浏览次数:20714 次

一个关于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这个静态成员,别的实例就不能取得控制权