关于Singleton的一个死锁问题
有这么个Double-Check-Locking的Singleton实例   
 // 
 //方法一 
 //    
 public   sealed   class   Singleton 
 { 
 private   static   volatile   Singleton   _instance; 
 private   static   object   syncRoot   =   new   object();   
 private   Singleton()   {   }   
 public   static   Singleton   Instance 
 { 
 get 
 { 
 if(_instance   ==   null) 
 { 
 Lock(syncRoot) 
 { 
 if(_instance   ==   null) 
 { 
 _instance   =   new   Singleton(); 
 } 
 } 
 } 
 return   _instance; 
 } 
 } 
 }     
 // 
 //方法二 
 // 
 public   sealed   class   Singleton 
 { 
 private   static   volatile   Singleton   _instance;   
 private   Singleton()   {   }   
 public   static   Singleton   Instance 
 { 
 get 
 { 
 if(_instance   ==   null) 
 { 
 Lock(typeof(Singleton)) 
 { 
 if(_instance   ==   null) 
 { 
 _instance   =   new   Singleton(); 
 } 
 } 
 } 
 return   _instance; 
 } 
 } 
 }   
 据说,   方法一能避免死锁,   那么想问问,   是如何避免的呢?   还有,   方法二里面什么情况下会出现死锁?   
 谢谢 
------解决方案--------------------方法二也不会出现死锁的,不过一般不锁类型。   
 怎么避免死锁……只加一个锁是不可能发生死锁的,你看看死锁的定义吧。
------解决方案--------------------Double-Check-Locking只是为了防止多线程时生成多个实例,而不是为了防止死锁