lock小记

简介:

都快把lock忘了用wcf 给手持设备做服务的时候可能会有并发操作但又忘了lock的使用情况

做个小例子,怕自己再忘了

不加lock的时候 结果可能 是负的下面有图,我们设想 的是不会有负数,

但是多个线程访问的时候就会出现这个问题,一个线程在访问的时候别其它的线程也在访问DoFun这个方法

就会出现错误就想办法让一个线程在处理DoFun的时候别的线程等待

static  int  myIndex = 50;
static  int  MyMinus = 100;
static  object  objLock = new  object ();
static  void  Main( string [] args)
{
     #region
     Thread _thread ;
     while  (myIndex>0)
     {              
         try
         {
             _thread = new  Thread( new  ParameterizedThreadStart(DoFun));
             _thread.Start(( object )myIndex--);
         }
         catch  (Exception ex)
         {
             Console.WriteLine( "程序错误!" );
             return ;
         }
     }
     Console.ReadLine();
     #endregion
 
}
public  static  void  DoFun( object  s)
{
     if  (MyMinus < 0)
     {
         throw  new  Exception( "NegativeNo" );
     }
 
 
     if  (MyMinus > ( int )s)
     {
         Thread.Sleep(500);
         MyMinus = MyMinus - ( int )s;
         Console.WriteLine( "Console:"  + MyMinus.ToString());
     }
     else
     {
         Console.WriteLine( "no!!!!" );
         return ;
     }
 
 
}

  

于是乎就用到 了lock我们用它把DoFun改写一下吧不过要注意死锁问题,

大家可以看一下msdn是怎么说的

public  static  void  DoFun( object  s)
{
     if  (MyMinus < 0)
     {
         throw  new  Exception( "NegativeNo" );
     }
 
     lock  (objLock)
     {
         if  (MyMinus > ( int )s)
         {
             Thread.Sleep(500);
             MyMinus = MyMinus - ( int )s;
             Console.WriteLine( "Console:"  + MyMinus.ToString());
         }
         else
         {
             Console.WriteLine( "no!!!!" );
             return ;
         }
     }
 
}

  再运行你就不会看到 有问题了


本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/archive/2012/12/11/2812334.html,如需转载请自行联系原作者

相关文章
|
4月前
|
安全 Java
synchronized与Lock
synchronized与Lock
|
5月前
|
安全 C++
C++标准库中的锁lock_guard、unique_lock、shared_lock、scoped_lock、recursive_mutex
C++标准库中的锁lock_guard、unique_lock、shared_lock、scoped_lock、recursive_mutex
112 0
|
5月前
|
C++
[C++] 互斥锁(unique_lock、lock_guard)
[C++] 互斥锁(unique_lock、lock_guard)
68 0
|
API 数据安全/隐私保护
Lock锁
Lock锁
144 0
Lock锁
|
Java API