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

C#中Monitor和Lock以及区别相关推荐

  1. 锁、C#中Monitor和Lock以及区别

    1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁 ...

  2. C#中Monitor和Lock的用法区别

    1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁 ...

  3. .net framework 4中SpinLock和lock的区别

    SpinLock,自旋锁.尝试获取该锁的线程持续不断的check是否可以获得.此时线程仍然是激活状态,只是在空转,浪费cpu而已.但是spinlock避免了线程调度和上下文切换,如果锁的时间极短的话, ...

  4. Java中synchronized和Lock的区别

    前言 最近有一个需求是需要将数据库的一些数据抽取出来放到文件文件命名方式为"FILENAME_yyyyMMddHHmmss",例如FILENAME_20200625120011.计 ...

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

    Monitor对象1.Monitor.Enter(object)方法是获取 锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...

  6. 第十三节:实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim)

    一. 监视锁(Monitor和lock) 1. Monitor类,限定线程个数的一把锁(Synchronized lock是他的语法糖),两个核心方法: Enter:锁住某个资源. Exit:退出某一 ...

  7. Java多线程之Synchronized和Lock的区别

    Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...

  8. NO.7 Monitor(管程)是什么意思?Java中Monitor(管程)的介绍

    目录 一.Monitor的概念 二.Monitor 基本元素 三.Java 语言对 monitor 的支持 临界区的圈定 monitor object synchronized 关键字 四.管程:并发 ...

  9. synchronized与Lock的区别与使用

    原文链接 https://blog.csdn.net/u012403290/article/details/64910926 ###引言: 昨天在学习别人分享的面试经验时,看到Lock的使用.想起自己 ...

最新文章

  1. 加载多瓦片地图_手把手教 | 网络时空大数据爬取与分析DAS系统(瓦片地图获取)...
  2. 2021年4月28日 深圳头条后台开发实习面试(hr面)
  3. Javascript prototype理解
  4. CSS 关于雪碧图预处理和后处理方案的讨论
  5. 安装SQLserver2008
  6. 红旗linux添加usb无线网卡,在Ubuntu 8.10中安装无线网卡RTL8187SE驱动
  7. (二十五)【NIPS 2017】Prototypical Networks for Few-shot Learning
  8. python 类的内置方法_【转】[python] 类常用的内置方法
  9. push指令的执行过程
  10. 帧传送、关联与身份验证状态
  11. 什么是Internet cookie?
  12. java学习--基础知识阶段性总结--多线程
  13. python写的代码怎么发给别人_用python 代码 怎么给别人发邮件的两种写法
  14. mysql中order by的原理
  15. SoapUI接口测试——SoapUI简介
  16. 网易游戏学院系列——书籍《游戏设计》【笔记】
  17. 全民投资人游戏服务器维护,欢乐园《全民仙战》3月5日14时合服公告
  18. 《Python语言程序设计基础》嵩天著-第3章程序部分练习题答案
  19. python 正数变成负数_初一数学上册第一章有理数1.1正数和负数基础知识概括及同步练习题含解析...
  20. 敏捷个人2012.2月份线下活动报道:活出我的最好生活

热门文章

  1. python编写圣诞树代码_python 实现圣诞树
  2. 教AI逐帧搓招玩《铁拳》通关最高难度,现在的街机游戏爱好者有点东西啊
  3. 北区首届科技文化潮流节启幕!诚邀科技企业参展,共同打造海淀北部最大科技“party”...
  4. 科学家:冬天,就应该睡饱了再起床上班!
  5. 不能打游戏的汽车不是好电影院!特斯拉面向国内推送V10.0系统,能辅助变道还能看爱奇艺...
  6. AI如何反低俗?今日头条推内容检测工具“灵犬”3.0,首次公开其技术原理
  7. 薪资留人还是情感留人?
  8. 第一部分:基础知识(第一章)屏幕部分续
  9. Nginx容器日志收集方案fluentd+elasticsearch+kilbana
  10. nodejs如何利用rpc调用python