C# Monitor类

9a324387511fb1cc46530a46110cf941.png

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
}

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet工控上位机编程

往期推荐

·  C# 数据流

·  C# 类型系统

·  C# 面向对象的编程

·  C# 执行 SQL 语句

·  C# 连接数据库

·  C# 迭代器

4dd4484bea9ef1e55dc040914e12ad7a.png

Love life,love yourself

关注小编不迷路呦~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值