zoukankan      html  css  js  c++  java
  • C# InterLock保证数据一致性

        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Increment counter");
                var c = new Counter();
                var t1 = new Thread(() => TestCounter(c));
                var t2 = new Thread(() => TestCounter(c));
                var t3 = new Thread(() => TestCounter(c));
                t1.Start();
                t2.Start();
                t3.Start();
                t1.Join();
                t2.Join();
                t3.Join();
                Console.WriteLine("Total Count:{0}", c.Count);
                Console.WriteLine("end Increment");

                var c1 = new CounterNoLock();

                t1 = new Thread(() => TestCounter(c));
                t2 = new Thread(() => TestCounter(c));
                t3 = new Thread(() => TestCounter(c));

                t1.Start();
                t2.Start();
                t3.Start();
                t1.Join();
                t2.Join();
                t3.Join();
                Console.WriteLine("Total Count:{0}", c1.Count);
                Console.WriteLine("end CounterNoLock");

            }
            static void TestCounter(CounterBase c)
            {
                for (int i = 0; i < 10000; i++)
                {
                    c.Increment();
                    c.Decrement();
                }
            }
            class Counter : CounterBase
            {
                private int _count;
                public int Count { get { return _count; } }
                public override void Increment()
                {
                    _count++;
                }
                public override void Decrement()
                {
                    _count--;
                }
            }
            class CounterNoLock : CounterBase
            {
                private int _count;
                public int Count { get { return _count; } }
                public override void Increment()
                {
                    Interlocked.Increment(ref _count);
                }
                public override void Decrement()
                {
                    Interlocked.Decrement(ref _count);
                }
            }
            abstract class CounterBase
            {
                public abstract void Increment();
                public abstract void Decrement();
            }
        }
  • 相关阅读:
    回到顶部
    angularjs 复选框 单选框
    关于angularjs的ng-repeat指令
    JS字符串对象
    JS的控制语句与异常
    JS的运算符
    JS的引入方式和基础规范
    z-index及透明度opacity,利用overflow设置头像
    css的定位
    css的float属性及清除浮动
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5599702.html
Copyright © 2011-2022 走看看