国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

C#中Monitor對(duì)象與Lock關(guān)鍵字的區(qū)別分析

2020-01-24 03:12:58
字體:
供稿:網(wǎng)友

Monitor對(duì)象

1.Monitor.Enter(object)方法是獲取鎖,Monitor.Exit(object)方法是釋放鎖,這就是Monitor最常用的兩個(gè)方法,當(dāng)然在使用過程中為了避免獲取鎖之后因?yàn)楫惓?,致鎖無法釋放,所以需要在try{} catch(){}之后的finally{}結(jié)構(gòu)體中釋放鎖(Monitor.Exit())。
2.Monitor的常用屬性和方法:

    Enter(Object) 在指定對(duì)象上獲取排他鎖。
    Exit(Object) 釋放指定對(duì)象上的排他鎖。
    IsEntered 確定當(dāng)前線程是否保留指定對(duì)象鎖。
    Pulse 通知等待隊(duì)列中的線程鎖定對(duì)象狀態(tài)的更改。
    PulseAll 通知所有的等待線程對(duì)象狀態(tài)的更改。
    TryEnter(Object) 試圖獲取指定對(duì)象的排他鎖。
    TryEnter(Object, Boolean) 嘗試獲取指定對(duì)象上的排他鎖,并自動(dòng)設(shè)置一個(gè)值,指示是否得到了該鎖。
    Wait(Object) 釋放對(duì)象上的鎖并阻止當(dāng)前線程,直到它重新獲取該鎖。


Lock關(guān)鍵字

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

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

復(fù)制代碼 代碼如下:

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

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

Monitor和Lock的區(qū)別

1.Lock是Monitor的語法糖。
2.Lock只能針對(duì)引用類型加鎖。
3.Monitor能夠?qū)χ殿愋瓦M(jìn)行加鎖,實(shí)質(zhì)上是Monitor.Enter(object)時(shí)對(duì)值類型裝箱。
4.Monitor還有其他的一些功能。

本文代碼示例:

復(fù)制代碼 代碼如下:

    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()
        {
            //做具體的事情
        }
    }
   

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 获嘉县| 富蕴县| 米易县| 小金县| 察雅县| 古蔺县| 巩留县| 肥城市| 体育| 泗水县| 松江区| 驻马店市| 汶上县| 大宁县| 团风县| 三原县| 宜宾县| 德化县| 安义县| 萍乡市| 昭通市| 桐城市| 赞皇县| 和龙市| 湄潭县| 延安市| 朝阳县| 长白| 绥宁县| 特克斯县| 太湖县| 长乐市| 阳西县| 永登县| 五原县| 金川县| 巩留县| 通河县| 朝阳市| 汾阳市| 泽普县|