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

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

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

      C# 使用lock關鍵字lock不同的對象

      c# lock關鍵字的本質

      是調用Monitor.Enter(object obj)并且在finally的時候調用Monitor.Exit(obj)

       

      在obj是不同數據類型的時候會出現不同的情況

      1.鎖定類型 例如lock(typeof(int))  lock(typeof(ClassA))   // CalssA 是一個類的定義

        備注:前者作用范圍跨AppDomain 不跨Process, 后者不跨AppDomain(默認設置)

        使用范圍:絕不推薦使用

      2.鎖定字符串 例如lock("abc") 和lock(s)//s是一個字符串的實例變量

        備注:當字符串已經駐留在內存的時候 這個lock是有效的, 如果字符串未駐留在內存那么這個lock就失效了,該lock是跨Appdomain不跨Process

        使用范圍: 一般不推薦使用

        以下代碼顯示了非駐留字符串導致的無法lock的問題,請在實際應用中避免lock(a+b)即使他們的值一樣 (vs2008 Debug)

       

       

      代碼
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading;

      namespace ConsoleApplication1
      {
      class Program
      {
      static void Main(string[] args)
      {
      string s1 = "a";
      string s2 = "bc";

      ThreadPool.QueueUserWorkItem(p
      =>
      {
      Thread.Sleep(
      3000); Console.WriteLine(" Thread2 Begin Test");
      lock (s1 + s2)
      {
      Console.WriteLine(
      "Thread2 Begin Lock");
      Thread.Sleep(
      1000);
      Console.WriteLine(
      "Thread2 End Lock");
      }
      });
      Console.WriteLine(
      "Thread1 Begin Test");
      lock (s1 + s2)
      {
      Console.WriteLine(
      "Thread1 Begin Lock");
      Thread.Sleep(
      10000);
      Console.WriteLine(
      "Thread1 End Lock");
      }
      }
      }
      }

       

      3.所有繼承于System.MarshalByRefObject 的對象  ,例如Remoting Service之類的

        備注:鎖定的是代理對象,在遠端的對象并沒有被鎖定(byValue 和byRef 兩種類型傳數據也有影響)

        使用范圍:不推薦

      4.值類型, 由于眾所周知的裝箱的問題...實際上鎖定根本不生效

        使用范圍:不推薦

      5. 應用[MethodImpl(MethodImplOptions.Synchronized)]標記的類

        實例方法鎖定的是this   lock(this)

        靜態方法鎖定的是typeof(ClassName)   lock(typeof(ClassName)) //ClassName是你當前的類名

        使用范圍:不推薦, 調用靜態方法將導致鎖定類型, 實例方法之間也相互影響鎖定關系

      6.lock(this)

        很容易誤用,例如在web page上調用 lock(this)....由于asp.net會為每次httpRequest , new一個類的實例...所以lock(this)在這里一點作用都沒有

        在其他的情況下:lock(this)鎖定了本身,那么但其他外部對象試圖使用這個類的時候會有困擾

        如果你的類是public給其他人用的,那么最好不要lock(this)

        請參考以下代碼(不推薦使用)

        

      代碼
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading;

      namespace ConsoleApplication1
      {
      public class ClassA
      {
      public void Test()
      {
      lock (this)
      {
      Console.WriteLine(
      "Test Begin Lock");
      Thread.Sleep(
      10000);
      Console.WriteLine(
      "Test End Lock");
      }
      }
      }
      class Program
      {
      static void Main(string[] args)
      {
      ClassA classA
      = new ClassA();

      ThreadPool.QueueUserWorkItem(p
      =>
      {
      Thread.Sleep(
      3000); Console.WriteLine(" Thread2 Begin Test");
      lock (classA)
      {
      Console.WriteLine(
      "Thread2 Begin Lock");
      Thread.Sleep(
      1000);
      Console.WriteLine(
      "Thread2 End Lock");
      }
      });
      classA.Test();
      Console.ReadLine();
      }
      }
      }

      7. lock(null) 必然拋出一個異常

      8.推薦使用以下方法lock

        private static object asyncLock=new object();

        lock(asyncLock)

        使用 private object asyncLock=new object(); 也是ok的,但是請注意避免之前提到的WebPage每次new一個類導致lock失效的問題

        影響范圍不跨AppDomain

       

       

        PS1:關于跨不跨AppDomain的問題,其實用處不大,大部分應用程序都只是創建一個DefaultDomain

        PS2:可以將一些Assembly設置為跨AppDomain的,以減少內存浪費和提高性能, 例如string和一些基本類型都是這樣實現的

        PS3:本人水平有限,如果錯漏還請大家幫忙...

      posted on 2010-11-19 16:02  聽說讀寫  閱讀(7053)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 97国产精品人人爽人人做| 国产清纯在线一区二区| 亚洲天堂在线观看完整版| 无码中文字幕人妻在线一区二区三区| 午夜毛片不卡免费观看视频| 精品国产一区二区三区国产区| 欧美成人无码a区视频在线观看| 久久久久影院色老大2020| 久久天天躁狠狠躁夜夜avapp| 国产成人精品白浆免费视频试看| 国产普通话对白刺激| 国产精品美女免费无遮挡| 国产av一区二区久久蜜臀| 亚洲精品国偷自产在线99人热| 亚洲综合一区二区三区| 久久精品国产亚洲av熟女| 人妻少妇久久久久久97人妻| 国产极品精品自在线不卡| 国产不卡的一区二区三区| 啦啦啦中文在线观看日本| 真实国产乱子伦视频| 日韩中文字幕av有码| 麻豆国产97在线 | 欧美| 亚洲国产精品日韩专区av| 国产系列丝袜熟女精品视频 | 亚洲欧美日本久久网站| 国产成人高清精品亚洲| 国产精品99久久久久久董美香| 无码加勒比一区二区三区四区| 国产日韩一区二区在线| 99中文字幕国产精品| 内射视频福利在线观看| 91亚洲国产成人久久蜜臀| 亚洲人成网站在线在线观看| 中文字幕久区久久中文字幕| 久久免费偷拍视频有没有| 欧美亚洲一区二区三区在线| 中文字幕日本一区二区在线观看| 风骚少妇久久精品在线观看| 色伦专区97中文字幕| 亚洲精品日韩中文字幕|