Monitor对象

  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) 释放对象上的锁并阻止当前线程,直到它重新获取该锁。

                                       Lock关键字

  1.Lock关键字实际上是一个语法糖,它将Monitor对象进行封装,给object加上一个互斥锁,A进程进入此代码段时,会给object对象加上互斥锁,此时其他B进程进入此代码段时检查object对象是否有锁?如果有锁则继续等待A进程运行完该代码段并且解锁object对象之后,B进程才能够获取object对象为其加上锁,访问代码段。

  2.Lock关键字封装的Monitor对象结构如下:

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

  3.锁定的对象应该声明为private static object obj = new object();尽量别用公共变量和字符串、this、值类型。

Monitor和Lock的区别

  1.Lock是Monitor的语法糖。

  2.Lock只能针对引用类型加锁。

  3.Monitor能够对值类型进行加锁,实质上是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()
{
//做具体的事情
}
}

最新文章

  1. Linux搜索文件夹下所有文件中字符串
  2. BeautifulSoup学习笔记
  3. STL源码--序列式容器
  4. Android Volley框架的使用(3)
  5. PHP 布尔类型
  6. linux(centos)如何查看文件夹大小
  7. ubuntu10.04版本下android源码的编译
  8. js中substring/substr和C#中Substring的用法
  9. word2vec 中的数学原理具体解释(五)基于 Negative Sampling 的模型
  10. 从Android源码的角度分析Binder机制
  11. js声明引入和变量声明和变量类型、变量
  12. redis 配置详解
  13. Java使用Redis学习笔记
  14. mongodb 远程访问配置
  15. hbase源码系列(三)Client如何找到正确的Region Server
  16. UITableView-FDTemplateLayoutCell 学习笔记
  17. C语言学习记录_2019.02.10
  18. 【Nodejs】“快算24”扑克牌游戏算法 1.01
  19. 为Emacs添加标签tabbar功能
  20. jenkins+maven+docker集成java发布(二)#远程发布

热门文章

  1. GPS部标平台的架构设计(五)-地图服务算法库
  2. Django根据现有数据库建立model
  3. Java绘图
  4. 如何防止sql注入
  5. Python快速建站系列-Part.Six-文章内容浏览
  6. ios 缺少合规证明
  7. UWP toast
  8. New Concept English 1-10
  9. C语言回顾-内存管理和指针函数
  10. 学习了quartz.net2.0的心得