<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【C#】為什么有可能會被多個線程修改的對象要加線程鎖

      例1、不用線程鎖的情況下,兩個線程對同一個變量進行加減操作

      static void Main(string[] args)
      {
          Counter counter = new Counter();
          var t1 = new Thread(() => TestCounter(counter));
          var t2 = new Thread(() => TestCounter(counter));
          t1.Start();
          t2.Start();
      
          Thread.Sleep(TimeSpan.FromSeconds(3));//睡眠3秒,保證t1、t2兩個線程都運行完畢
          Console.WriteLine(counter.count);
          Console.Read();
      }

        對count變量不斷地加1減1,最后count應該為0,但可以看出用兩個線程來進行這個操作的時候,往往得到的結果并不是0,出現錯誤。

      例2、使用線程鎖,兩個線程對同一個變量進行加減操作

      static void Main(string[] args)
      {
          CounterWithLock counterlock = new CounterWithLock();
          var t1 = new Thread(() => TestCounter(counterlock));
          var t2 = new Thread(() => TestCounter(counterlock));
          t1.Start();
          t2.Start();  
      
          Thread.Sleep(TimeSpan.FromSeconds(3));//睡眠3秒,保證t1、t2兩個線程都運行完畢
          Console.WriteLine(counterlock.count);
          Console.Read();
      }

        加上線程鎖后,結果正常,因此加上線程鎖才能保證不會出錯。

       

       

      例1、例2所用到的類和方法

      /// <summary>
      /// 對同一個變量進行1000次加減操作
      /// </summary>
      /// <param name="c"></param>
      static void TestCounter(CounterBase c)
      {
          Console.WriteLine("TestCounter start");
          for (int i = 0; i < 1000; i++)
          {
              c.Increment();
              c.Decrement();
          }
          Console.WriteLine("TestCounter end");
      }
      abstract class CounterBase
      {
          public abstract void Increment();
          public abstract void Decrement();
      }
      
      /// <summary>
      /// 沒有鎖
      /// </summary>
      class Counter : CounterBase
      {
          public int count { get; private set; }
      
          public override void Increment()
          {
              count ++;
          }
      
          public override void Decrement()
          {
              count --;
          }
      }
      
      /// <summary>
      /// 加鎖
      /// </summary>
      class CounterWithLock : CounterBase 
      {
          private readonly object locker = new object();
          public int count { get; private set; }
      
          public override void Increment()
          {
              lock (locker)
              {
                  count++;
              }
          }
      
          public override void Decrement()
          {    
              lock (locker)
              {
                  count--;
              }
          }
      }

       

      posted @ 2016-12-28 14:07  Doc.stu  閱讀(2969)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 亚洲国产在一区二区三区| 亚洲午夜伦费影视在线观看| 邵阳县| 亚洲第一最快av网站| 亚洲色成人一区二区三区| 377人体粉嫩噜噜噜| 国产精品一区二区不卡91| 国产欧美日韩亚洲一区二区三区| 国产精品丝袜一区二区三区| 成人无码视频| 国产精品午夜福利视频| 丁香花在线影院观看在线播放| 97在线视频人妻无码| 中文字幕有码高清日韩| 无码任你躁久久久久久老妇| 色秀网在线观看视频免费| jizzjizz少妇亚洲水多| 精品国产自在久久现线拍| 高潮射精日本韩国在线播放| 国产国拍亚洲精品永久软件| 女人18片毛片60分钟| 亚洲av二区三区在线| 国产97人人超碰CAO蜜芽PROM | 色综合久久久久综合99| 99久久无码私人网站| 国产69精品久久久久久| 亚洲欧美日韩综合一区在线 | 国产蜜臀一区二区三区四区| 毛片内射久久久一区| 欧美性猛交xxxx免费看| 国产熟女激情一区二区三区| 蜜臀午夜一区二区在线播放| 激情六月丁香婷婷四房播| 亚洲成人四虎在线播放| 9999国产精品欧美久久久久久| 四虎永久在线精品8848a| 宾馆人妻4P互换视频| 偷拍精品一区二区三区| 亚洲国产欧美在线看片一国产| 亚洲成人av综合一区| 色欲国产精品一区成人精品|