懂lock的帮帮我,很简单的
   using   System; 
 using   System.Threading;   
 class   salary 
 { 
 private   static   int   count=100; 
 private   object   abcde=new   object();   
 public   int   Count 
 { 
 get{return   count;} 
 }     
 public   void   RunThread1() 
 { 
 lock(abcde) 
 { 
 count+=5; 
 } 
 } 
 public   void   RunThread2() 
 { 
 lock(abcde) 
 { 
 count-=2; 
 } 
 } 
 public   static   void   Main(string[]   args) 
 { 
 salary   s=new   salary(); 
 Thread   thread1=new   Thread(new   ThreadStart(s.RunThread1)); 
 Thread   thread2=new   Thread(new   ThreadStart(s.RunThread2)); 
 thread1.Start(); 
 Console.WriteLine( "Now   Salary   is:    "+s.Count); 
 thread2.Start(); 
 Console.WriteLine( "Now   Salary   is:    "+s.Count);   
 } 
 }     
 ----------------------------   
 开始count是=100 
 执行线程1   是要让它+5   =105 
 执行线程2   是要让它-2   =103   
 但为什么我得到的结果会是 
 Now   Salary   is:   100 
 Now   Salary   is:   100   
 为什么不是 
 Now   Salary   is:   105 
 Now   Salary   is:   103                  
------解决方案--------------------不会把,我执行你的代码是 
 Now Salary is: 105 
 Now Salary is: 103    
 ...
------解决方案--------------------因为你是线程执行的,所以下面2句代码并不是按先后顺序执行的。 
 thread1.Start(); 
 Console.WriteLine( "Now Salary is:  "+s.Count); 
 就是thread1开始了,跟着就执行Console.WriteLine( "Now Salary is:  "+s.Count);,   
 但thread1线程中的count+=5代码可能还不执行, 
 Console.WriteLine( "Now Salary is:  "+s.Count);和count+=5这2句代码是没有执行先后关系的
------解决方案--------------------你单步调试的看下,就知道程序是怎么在走了。。
------解决方案--------------------楼主可以设置2个断点在 
 Console.WriteLine( "Now Salary is:  "+s.Count); 
 count+=5   
 看看是不是先执行了Console.WriteLine( "Now Salary is:  "+s.Count);
------解决方案--------------------lock的作用只是为了避免多线程冲突,与线程的执行顺序无关,当然并发冲突的机会非常小的.