源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#中Monitor对象与Lock关键字的区别分析

  • 时间:2021-05-12 11:45 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#中Monitor对象与Lock关键字的区别分析
[b]Monitor对象 [/b]1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁无法释放,所以需要在try{} catch(){}之后的finally{}结构体中释放锁(Monitor.Exit())。 2.Monitor的常用属性和方法:     Enter(Object) 在指定对象上获取排他锁。     Exit(Object) 释放指定对象上的排他锁。     IsEntered 确定当前线程是否保留指定对象锁。     Pulse 通知等待队列中的线程锁定对象状态的更改。     PulseAll 通知所有的等待线程对象状态的更改。     TryEnter(Object) 试图获取指定对象的排他锁。     TryEnter(Object, Boolean) 尝试获取指定对象上的排他锁,并自动设置一个值,指示是否得到了该锁。     Wait(Object) 释放对象上的锁并阻止当前线程,直到它重新获取该锁。 [b]Lock关键字[/b] 1.Lock关键字实际上是一个语法糖,它将Monitor对象进行封装,给object加上一个互斥锁,A进程进入此代码段时,会给object对象加上互斥锁,此时其他B进程进入此代码段时检查object对象是否有锁?如果有锁则继续等待A进程运行完该代码段并且解锁object对象之后,B进程才能够获取object对象为其加上锁,访问代码段。 2.Lock关键字封装的Monitor对象结构如下:
[u]复制代码[/u] 代码如下:
            try             {                 Monitor.Enter(obj);                 dosomething();             }             catch(Exception ex)             {             }             finally             {                 Monitor.Exit(obj);             }
  3.锁定的对象应该声明为private static object obj = new object();尽量别用公共变量和字符串、this、值类型。 [b]Monitor和Lock的区别[/b] 1.Lock是Monitor的语法糖。 2.Lock只能针对引用类型加锁。 3.Monitor能够对值类型进行加锁,实质上是Monitor.Enter(object)时对值类型装箱。 4.Monitor还有其他的一些功能。 本文代码示例:
[u]复制代码[/u] 代码如下:
    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()         {             //做具体的事情         }     }    
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部