C# Monitor类

网友投稿 255 2022-09-03

C# Monitor类

lock 语句由 C# 编译器解析为使用 Monitor 类。下面的 lock 语句:

lock (obj){ // synchronized region for obj}

被解析为调用 Enter() 方法,该方法会一直等待,直到线程锁定对象为止。一次只有一个线程能锁定对象,只要解除了锁定。线程就可以进入同步阶段。Monitor 类的 Exit()方法解除了锁定。编译器把 Exit() 方法放在 try 块的 finally 处理程序中,所以如果抛出了异常,就会解除该锁定。

Monitor.Enter(obj);try{ // synchronized region for obj }finally{ Monitor.Exit(obj);}

与 C#的 lock 语句相比,Monitor 类的主要优点是:可以添加一个等待被锁定的超时值。这样就不会无限期地等待被锁定,而可以像下面的例子那样使用 TryEnter()方法,其中给它传递一个超时值,指定等待被锁定的最长时间。如果 obj 被锁定,TryEnter() 方法就把布尔型的引用参数设置为true,并同步地访问由对象 obj 锁定的状态。如果另一个线程锁定 obj 的时间超过了 500 毫秒,TryEnter() 方法就把变量 lockTaken 设置为 false,线程不再等待,而是用于执行其他操作。也许在以后,该线程会尝试再次获得锁定。

bool _lockTaken = false;Monitor.TryEnter(_obj, 500, ref _lockTaken); if (_lockTaken) { try { // acquired the lock // synchronized region for obj } finally { Monitor.Exit(obj); }}else{ // didn't get the lock, do something else}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Tomcat 源码分析 (Tomcat的Session管理之管理持久化Session) (十三)
下一篇:色彩营销进军食品业,光靠颜值行不行?(食品色彩越鲜艳越好吗)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~