关于lock与monitor? 请问在多线程中lock与monitor的区别是什么,在什么情况使用lock,什么情况下使用monitor? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 lock: 锁定变量、互斥Monitor:是lock的应用,用在对象的lock http://msdn.microsoft.com/zh-cn/library/system.threading.monitor(VS.80).aspxhttp://msdn.microsoft.com/zh-cn/library/c5kehkcz.aspx lock(a){}锁定代码,注意a的区别,如果是static的对所有的线程起作用,如果是class A里定义的public object a,对A的所有对象线程起作用;如果是lock(new object){}只对访问相同A的对象的线呈起作用。可以把a看作锁,a的作用范围就是lock线呈的范围monitor是锁定对象monitor(A){}也就是在这段程序内锁定A lock(a) = Monitor.Enter (a);使用Monitor要注意Enter和Exit要配对.否则极易造成线程间的死锁.特别是在有try...catch之类的代码段中使用常会在某些情况下Enter后没有Exit.在C#中使用lock就没有这种问题,a在花括号结束后就被自动调用了Exit. 锁住当前实例:lock(this)锁住此类的所有实例:lock(typeof([Type]))对字符串的锁,会锁定所有相同内容的字符串,建议可以用静态字符串代替lock关键字比Monitor简洁,其实lock就是对Monitor的Enter和Exit的一个封装Monitor类通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问临界区的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。还可以使用 Monitor 来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码节,除非另一个线程正在使用其他的锁定对象执行该代码。 翻翻 MSDN 就知道它两是同一样东西 lock总是一个语句块吧!那么一个语句块不能写明的代码,例如在一个对象初始化时锁定了对象,在它dispose的时候释放,就肯定不能使用lock。自然,既然monitor是比lock功能更加离散,也就功能更多一点。 lock 锁定的是代码块。在某一时刻只允许一个线程访问这段代码。 C#怎么操作组策略? JavaScript没没没没没反应 关于一个ADO.NET疑惑(菜鸟级)! RSA解密问题(不正确的数据) 进来帮我看看C# C# winform button 拦截button点击事件消息 在线求助:如何在窗体中控制dataGrid控件的显示位置 C#网络开发中遇到的问题 希望各位大虾帮助 哈希表遍历时问题 reportviewer绑定报表在编译和不编译时的区别 C# 在mysql保存图片地址的问题 ProgressBar问题
Monitor:是lock的应用,用在对象的lock
{}锁定代码,注意a的区别,如果是static的对所有的线程起作用,如果是class A里定义的public object a,对A的所有对象线程起作用;
如果是lock(new object){}只对访问相同A的对象的线呈起作用。可以把a看作锁,a的作用范围就是lock线呈的范围monitor是锁定对象
monitor(A)
{}也就是在这段程序内锁定A
使用Monitor要注意Enter和Exit要配对.
否则极易造成线程间的死锁.特别是在有try...catch之类的代码段中使用
常会在某些情况下Enter后没有Exit.在C#中使用lock就没有这种问题,a在
花括号结束后就被自动调用了Exit.
锁住此类的所有实例:lock(typeof([Type]))
对字符串的锁,会锁定所有相同内容的字符串,建议可以用静态字符串代替
lock关键字比Monitor简洁,其实lock就是对Monitor的Enter和Exit的一个封装
Monitor类通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问临界区的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。还可以使用 Monitor 来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码节,除非另一个线程正在使用其他的锁定对象执行该代码。