• 并发情况下取唯一流水号的写法


        readonly object _Syn = new object();
        int Seed = 0;
        
        public  int TreadValueGet()
        {
          // 5 Critical Section
          // Enter 和 Exit 方法提供的功能与 C# lock 语句提供的功能相同,
          // 区别在于 lock 将 Enter(Object, Boolean) 方法重载和 Exit 方法包装在 try…finally 块中以确保释放监视器
          //int _retValue = 0;
          //while (!System.Threading.Monitor.TryEnter(_Syn, 2))//TryEnter可以防御线程死锁
          //{
    
          //}
          //try
          //{
          //  _retValue = Seed + 1;
          //  Seed = _retValue;
          //  return _retValue;
          //}
          //finally
          //{
          //  System.Threading.Monitor.Exit(_Syn);
          //}
    
           // 4
          return System.Threading.Interlocked.Increment(ref Seed);
    
          // 3
          //return System.Threading.Interlocked.Add(ref Seed, 1);
    
          // 2 乐观锁,判断旧值未被修改后,用新值替换旧值.
          //   Interlocked.CompareExchange提供原子性的比较替换操作
          //int _seed;
          //int _retValue = 0;
          //do
          //{
          //  _seed = Seed;
          //  _retValue = _seed + 1;
          //} while (_seed != System.Threading.Interlocked.CompareExchange(ref Seed, _retValue, _seed));
          //return _retValue;
    
          // 1 最常用方法
          //lock (_Syn)
          //{
          //  return Seed++;
          //}
        }
    

      

    System.Threading.Interlocked资料

    http://msdn.microsoft.com/zh-cn/library/system.threading.interlocked.aspx

  • 相关阅读:
    Hibernate之二级缓存
    Hibernate之HQL
    Hibernate 一对多自关联 多对多
    hibernate关联关系(一对多)
    Hibernate之主键生成策略
    Hibernate01
    struts的图片上传
    HashMap和HashTable本质性的区别
    集合03
    集合
  • 原文地址:https://www.cnblogs.com/Grart/p/4084955.html
Copyright © 2020-2023  润新知