西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)C#.NET → C#中Monitor對象和Lock關(guān)鍵字的區(qū)別

C#中Monitor對象和Lock關(guān)鍵字的區(qū)別

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2013/6/24 11:16:41字體大。A-A+

作者:西西點擊:7次評論:1次標簽: Lock

  • 類型:桌面壁紙大。52.6M語言:英文 評分:2.0
  • 標簽:
立即下載

Monitor對象
1.Monitor.Enter(object)方法是獲取鎖,Monitor.Exit(object)方法是釋放鎖,這就是Monitor最常用的兩個方法,當然在使用過程中為了避免獲取鎖之后因為異常,致鎖無法釋放,所以需要在try{} catch(){}之后的finally{}結(jié)構(gòu)體中釋放鎖(Monitor.Exit())。

2.Monitor的常用屬性和方法:

    Enter(Object) 在指定對象上獲取排他鎖。

    Exit(Object) 釋放指定對象上的排他鎖。

    IsEntered 確定當前線程是否保留指定對象鎖。

    Pulse 通知等待隊列中的線程鎖定對象狀態(tài)的更改。

    PulseAll 通知所有的等待線程對象狀態(tài)的更改。

    TryEnter(Object) 試圖獲取指定對象的排他鎖。

    TryEnter(Object, Boolean) 嘗試獲取指定對象上的排他鎖,并自動設(shè)置一個值,指示是否得到了該鎖。

    Wait(Object) 釋放對象上的鎖并阻止當前線程,直到它重新獲取該鎖。

Lock關(guān)鍵字

1.Lock關(guān)鍵字實際上是一個語法糖,它將Monitor對象進行封裝,給object加上一個互斥鎖,A進程進入此代碼段時,會給object對象加上互斥鎖,此時其他B進程進入此代碼段時檢查object對象是否有鎖?如果有鎖則繼續(xù)等待A進程運行完該代碼段并且解鎖object對象之后,B進程才能夠獲取object對象為其加上鎖,訪問代碼段。

2.Lock關(guān)鍵字封裝的Monitor對象結(jié)構(gòu)如下:

            try
            {
                Monitor.Enter(obj);
                dosomething();
            }
            catch(Exception ex)
            {
                
            }
            finally
            {
                Monitor.Exit(obj);
            }

3.鎖定的對象應(yīng)該聲明為private static object obj = new object();盡量別用公共變量和字符串、this、值類型。

Monitor和Lock的區(qū)別

  1.Lock是Monitor的語法糖。

  2.Lock只能針對引用類型加鎖。

  3.Monitor能夠?qū)χ殿愋瓦M行加鎖,實質(zhì)上是Monitor.Enter(object)時對值類型裝箱。

4.Monitor還有其他的一些功能。

本文代碼示例:

    class Program
    {
        private static object obj = new object();
        public void LockSomething()
        {
            lock (obj)
            {
                dosomething();
            }
        }
        public void MonitorSomeThing()
        {
            try
            {
                Monitor.Enter(obj);
                dosomething();
            }
            catch(Exception ex)
            {
                
            }
            finally
            {
                Monitor.Exit(obj);
            }
        }

        public void dosomething()
        { 
            //做具體的事情
        }
    }

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)