求教:请问纯粹使用lock,和调用moniter.pulse有什么区别?
例如 
 两个线程同时调用如下代码   
 lock(object) 
 { 
 }     
 和 
 lock(object) 
 { 
          Monitor.PulseAll(); 
 }   
 有什么区别呢?
------解决方案--------------------Monitor.PulseAll() 通常和Monitor.Wait() 配合使用; 当一个线程运行了Monitor.Wait() 就会阻塞在这个语句上,一直到有另外一个线程运行Monitor.PulseAll()才能得到没锁Object的锁,并且继续运行.   
 它们二者配合使用是线程之间传递共享资源的状态变化的.   
 下边有个例子:   
 private ArrayList arrayList = new ArrayList();      
 public void Method1() // Thread-safe method.  
 {  
     lock (arrayList)  
     {  
         // Imagine we need at least two items.  
         while (arrayList.Count  < 2)  
             Monitor.Wait(arrayList);      
         // Do work with the items…  
     }      
 }      
 public void AddItem(object item) // Thread-safe method.  
 {  
     lock (arrayList)  
     {  
         Monitor.PulseAll(arrayList); // We’re gonna change the state.  
         // We could also do Pulse.    
         arrayList.Add(item);  
     }      
 }      
 public void RemoveItem(int index) // Thread-safe method.  
 {  
     lock (arrayList)  
     {  
         Monitor.Pulse(arrayList);  
         arrayList.RemoveAt(index);  
     }      
 }  
------解决方案--------------------哦,那用了lock似乎就不用montior了啊,lock好简单 
 ----------------------------------------------   
 lock(object) 
 { 
 //DoSomething(); 
 }   
 等同于:   
 try 
 { 
 Monitor.Enter(object); 
 //DoSomething(); 
 } 
 catch 
 { 
 throw; 
 } 
 finally    //这个经常会忘掉,用lock 就简单了. 
 { 
 Monitor.Exit(object); 
 }