zoukankan      html  css  js  c++  java
  • 多线程06-Lock

        class Program
        {
            static void Main()
            {
                Console.WriteLine("Start");
                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();
                Console.WriteLine("Total:{0}", c.Count);
                var d = new CounterWithLock();
                var d1 = new Thread(() => TestCounter(d));
                var d2 = new Thread(() => TestCounter(d));
                var d3 = new Thread(() => TestCounter(d));
                d1.Start();
                d2.Start();
                d3.Start();
                Console.WriteLine("Total:{0}", d.Count);
                //Console.ReadKey();
            }
            static void TestCounter(CounterBase c)
            {
                for (var i = 0; i < 10000000; i++)
                {
                    c.Increment();
                    c.Decrement();
                }
            }
            class Counter : CounterBase
            {
                private int _counter;
                public int Count { get { return _counter; } }
                public override void Increment()
                {
                    _counter++;
                }
                public override void Decrement()
                {
                    _counter--;
                }
            }
            class CounterWithLock : CounterBase
            {
                private int _counter;
                public int Count { get { return _counter; } }
                public readonly object _synvRoot = new object();
                public override void Increment()
                {
                    lock (_synvRoot)
                    {
                        _counter++;
                    }
                }
                public override void Decrement()
                {
                    lock (_synvRoot)
                    {
                        _counter--;
                    }
                }
            }
            abstract class CounterBase
            {
                public abstract void Increment();
                public abstract void Decrement();

            }
        }
  • 相关阅读:
    微软Silverlight团队关于PDC会议发表官方补充声明(风云翻译版)
    《银光志Silverlight 3.0开发详解与最佳实践》发行第三版总销量过万册
    Silverlight医学PACS诊断分析管理系统【案例分享】
    微软PDC10与最后的恐慌者
    风云的银光志Silverlight4.0教程之与学会使用Frame控件
    WPF案例之生产线控制器管理系统
    WindowsPhone7 经典3D游戏《刺客信条》评测
    Silverlight4开发的炫酷企业网站整站(运行大量特效)
    微软Windows Phone7超越Android、iOS的五大优势
    as3 滤镜学习笔记
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5600799.html
Copyright © 2011-2022 走看看