首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个关于lock的有关问题

2012-03-05 
一个关于lock的问题publicclassEntryIdCache{privatestaticobject_entriesLocknewobject()internalvoidE

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

热点排行