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 = ; i < ; 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();
        }
    }

最新文章

  1. gcc与makefile编译 BY 四喜三顺
  2. C++多态的实现及原理详细解析
  3. 织梦后台更新,报错DedeCMS Error:Tag disabled:"php" more...
  4. eclipse+maven+jetty环境下修改了文件需要重启才能修改成功
  5. 响应式十日谈第一日:使用 rem 设置文字大小
  6. AngularJS 中的 Promise 和 设计模式
  7. for_each的各种情况下的使用详解
  8. C++ Primer 学习笔记_79_模板与泛型编程 --模板编译模型
  9. Ajax请求访问action推断文件是否存在
  10. 《JS权威指南学习总结--6.8对象的三个属性》
  11. jsoncpp第二篇------API
  12. BZOJ 3550: [ONTAK2010]Vacation [单纯形法]
  13. Appium--swipe滑动方法
  14. 调用获取学生信息的接口,保存到excel里面
  15. less的基本使用
  16. JNI C反射调用java方法
  17. MVC 5限制所有HTTP请求必须是POST方式
  18. PKUWC 2019&amp;WC 2019爆零记
  19. RabbitMQ理论
  20. c# HTML中提取图片地址

热门文章

  1. EF添加关联的提示问题:映射从第 260 行开始的片段时有问题:
  2. 详解Document.Cookie
  3. split 分割文件
  4. [POI2006]ORK-Ploughing(贪心,枚举)
  5. TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片
  6. vue @import css
  7. windows2008R2-AD域控组策略设置与其它相关设置
  8. 对https的研究
  9. python之requests模块中的params和data的区别
  10. 项目部署到tomcat上