• 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();
            }
        }
  • 相关阅读:
    tensorflow 镜像
    TDD、BDD、DDD
    Node.js结合Selenium做Web自动化测试
    Selenium 对元素element的操作举例
    Selenium UI 举例 getCssValue
    《测之重器——自动化测试框架搭建指南》
    《Robot Framework自动化测试修炼宝典》道长
    SQLServer中round函数
    SQLServer中对时间和长度的处理
    SQLServer中获取所有数据库名、所有表名、所有字段名的SQL语句
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5599702.html
Copyright © 2020-2023  润新知