官方备注:

Monitor类通过向单个线程授予对象所来控制对对象的访问。对象所提供限制访问代码块的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。还可以使用Monitor来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码,除非另一个线程正在使用其他的锁定对象执行改代码。

Monitor类调用Enter或TryEnter方法获取对象锁,使用Exit放弃对象锁,在Enter/TryEnter和Exit之间可调用Pause/PauseAll或Wait方法,Wait方法的调用会放弃对象锁并堵塞当前线程,当其他线程调用Pause/PauseAll方法通知其他线程对象锁(必须是针对相同的对象的锁)的状态发生变更,其他因调用Wait方法而放弃锁并堵塞线程的线程将重新获取之前放弃的锁,从而使线程继续直到Exit方法彻底放弃锁。

当一个线程调用Wait导致暂时释放锁并堵塞线程后,如果没有其他线程调用Pause通知堵塞的线程可以重新获取锁,那么调用Wait的线程会一直处于堵塞状态,除非其他线程调用Pause/PauseAll方法。

MethodImplAttribute特性修饰某方法时,在构造方法中传入MethodImplOptions.Synchronized参数可使被修饰的方法只能在单线程中被调用,如果被修饰的方法是静态方法则锁住的是对象的类型,如果是实例方法,则锁住的是方法的对象的实例。

//2015-03-29

命名空间System.Threading命名空间的同步锁 Monitor类的更多相关文章

  1. 多线程状态与优先级、线程同步与Monitor类、死锁

    一.线程状态 二.线程优先级 三.初步尝试多线程 class Program { static void Main(string[] args) { while (true) { MessagePri ...

  2. c#同步锁Monitor.Enter(T)

    protected static object MObjLock = new object();//同步锁 public string GetData(int mId) { Monitor.Enter ...

  3. Thread锁 Monitor类、Lock关键字和Mutex类

    Monitor 类锁定一个对象 当多线程公用一个对象时,也会出现和公用代码类似的问题,这种问题就不应该使用lock关键字了,这里需要用到System.Threading中的一个类Monitor,我们可 ...

  4. System.Threading

    线程:定义为可执行应用程序中的基本执行单元. 应用程序域:一个应用程序内可能有多个线程. 上下文:一个线程可以移动到一个特定的上下文的实体 导入命名空间: //得到正在执行这个方法的线程 Thread ...

  5. 一、并行编程 - 数据并行 System.Threading.Tasks.Parallel 类

    一.并行概念 1.并行编程 在.NET 4中的并行编程是依赖Task Parallel Library(后面简称为TPL) 实现的.在TPL中,最基本的执行单元是task(中文可以理解为"任 ...

  6. 同步锁Lock(互斥锁)

    同步锁作用: 在我当前包含(lock.acquire() 和 lock.release()之间 )的代码没有执行完成,不进行线程切换,必须等我执行完了,下一个线程才能继续执行(为什么要用同步锁,假如我 ...

  7. 结合 Redis 实现同步锁

    1.技术方案 1.1.redis的基本命令 1)SETNX命令(SET if Not eXists) 语法:SETNX key value 功能:当且仅当 key 不存在,将 key 的值设为 val ...

  8. Monitor 类

    命名空间:System.Threading 程序集: mscorlib.dll, System.Threading.dll 尝试获取指定对象的排他锁. 用于 Monitor 锁定对象 (即引用类型) ...

  9. 线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading

    入门-------------------------------------------------------------------------------- 概述与概念    一个C#程序开始 ...

随机推荐

  1. 自定义javascript log方法

    /** * 类似chrome,firefox的console对象 * 但是在IE等不支持console的浏览器不会报错 * 理论上浏览器支持的console的方法都支持,比如谷歌的 * assert, ...

  2. 对contentoffset的理解

    今天遇到一个问题,在写瀑布流时,竖屏的时候可以正常实现,在手机变成横屏后,总是显示不全. 最终查了两个小时,查到了导致这个的原因,是自己的判断cell是否在当前显示区域的方法写错了. 根本原因是没有很 ...

  3. Nginx 1.10.2 发布,高性能 Web 服务器

    Nginx 1.10.2 发布了.Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器 更新内容: Changes with n ...

  4. Android Fragment (二) 实例2

    由于看客的要求,我就把读者所要的写出来. 由于上一篇是每一个Fragment 实例了同一个layout.xml ,造成了读者的困惑,这篇我就让每一个Fragment 加载一个不同的layout.xml ...

  5. php+mysql的微信文章发布平台

    如何在微信上发表丰富图文的文章? 最近在新浪云平台上做了一个php+mysql的微信文章发布平台,丫丫说. 在线编辑文章,扫一扫即可分享到微信,发到朋友圈,非常简单! http://yayashuo. ...

  6. iOS学习之单例模式

    单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类 ...

  7. 视频控件VideoView的简单使用

    一.在布局文件中放置VideoView控件 二.在Activity中获取到该控件后,通过给该控件设置视频控制器(setMediaController(new MediaController(this) ...

  8. 预装win8的系统换win7需要做的bios设置

    https://zhidao.baidu.com/question/873669708066476212.html (一)联想G50-70由于预装的是WIN8位系统,哪么改装WIN7 64位的方法如下 ...

  9. POJ 3067 原来是树状数组--真的涨姿势

    题意:计划在东边的城市和西边的城市中建路,东边的点从1.....n,西边的点从1......m,求这些点连起来后有多少个交叉. PS:这个题目没有任何思路,没想到是树状数组.... 交叉出5个点 分析 ...

  10. 强大反调试cm的奇葩破解

    系统 : Windows xp 程序 : Crackme-xp 程序下载地址 :http://pan.baidu.com/s/1slUwmVr 要求 : 编写注册机 使用工具 : OD & I ...