关于Application.Lock和Lock(obj) 转 http://www.cnblogs.com/yeagen/archive/2012/03/01/2375610.html
2018-03-13 04:32
459 查看
关于Application.Lock和Lock(obj)
Posted on 2012-03-01 15:28 billpeng 阅读(3498) 评论(3) 编辑 收藏1.Application.Lock和Application.UnLock一般配对出现,用于锁住Lock与UnLock之间的所有代码(注意不光锁住对于Application的赋值)。
2.Lock(obj) 于用锁住obj对象,obj对象必须是全局对象(如:Application)。
Application.Lock/UnLock的使用方法:
Application.Lock();
//其他代码
Application["value"] = 1;
//其他代码
Application.UnLock();
Lock(obj)的使用方法:
Lock(Application){
//其他代码
Application["value"] = 1;
//其他代码
}
以上两段代码的功能是一样的,都是锁住代码段让代码段内的代码不会被多线程同时执行。
它们两者之间也存在区别,来看一下它们的区别:
网站内任何一个网页执行Application.Lock的时候,整站中所有关于Application的操作都会被锁定延时执行。(包括:Application赋值和Application读取);而Lock(obj)则不会影响其他没有写Lock(obj)的页面。
例子:
先来看看Application.Lock的用法:
A页面:
Application.Lock();
Application["value"] = 1;
System.Threading.Thread.Sleep(10000);
Application.UnLock();
B页面:
object value = Applcation["value"];
我们先执行A页面,再执行B页面。由于Application在A页面中被锁定,所以B页面中需要获取Application中的值则需要等待A页面中执行完毕才行。
我们再来看一下Lock(obj)的用法:
A页面:
lock(Application)
{
Application["value"] = 1;
System.Threading.Thread.Sleep(10000);
}
B页面:
object value = Applcation["value"];
Applcation["value"] = 2;
我们同样先执行A页面,再执行B页面。你会发现A页面中Application虽然被锁定,但是由于在B页面并没有相应Lock代码,读取和修改都是成功的。
如果需要把B页面锁住,则需要把B页面的代码修改成:
lock(Application)//B页面里也要加入Lock
{
object value = Applcation["value"];
Applcation["value"] = 2;
}
另外:Application和Lock(Application)虽然都可以锁定Application,但不能互相锁定,即:在A页面中用Application.Lock/UnLock,在B页面中用Lock(Application),这样B页面是锁定不了的,当然如果B页面中本身就包含了对Application的读取和赋值,那么B页面也会被锁,原因是上面已经提到了。
由此可见:Application.Lock/UnLock比较安全,因为它是全局锁定所有的Application的,而Lock(obj)则更灵活,因为另一页面中如果没有写Lock(obj)则可以修改其他页面Lock住的内容,所以写代码需要我们更认真。倒底是用哪个比较好,就看各位自己的实际需求了。
相关文章推荐
- http://www.cnblogs.com/ringofthec/archive/2010/10/26/luabindobj.html
- 关于运算符重载(总结) --http://www.cnblogs.com/xyl-share-happy/archive/2012/12/06/2804401.html
- 收集关于scrollTop信息 http://www.cnblogs.com/FrameWork/archive/2007/04/13/712750.html
- 关于字符串匹配算法研究 http://www.cnblogs.com/Su-30MKK/archive/2012/09/17/2688122.html
- 关于<验证码>的实现和执行流程 http://www.cnblogs.com/android-html5/archive/2012/05/19/2533650.html
- 关于Jquery中ajax方法data参数用法的总结http://www.cnblogs.com/tim190/archive/2010/10/20/1856523.html
- 关于ResolveClientUrl和ResolveUrl的使用 问题 (http://www.cnblogs.com/borllor/archive/2008/02/25/1081037.html)
- 关于android性能,内存优化 http://www.cnblogs.com/zyw-205520/archive/2013/02/17/2914190.html
- sql 分页(原:http://www.cnblogs.com/fly_zj/archive/2010/07/06/1772536.html)
- CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html
- 【转】http://www.cnblogs.com/springyangwc/archive/2011/03/30/2000388.html
- _exit和exit的区别 http://www.cnblogs.com/hnrainll/archive/2011/08/17/2142001.html
- http://www.cnblogs.com/zxp_9527/archive/2009/05/07/1452253.html
- String.Trim()真相大揭秘(转:http://www.cnblogs.com/breezewoo/archive/2010/01/13/string_trim.html)
- C++中引用(&)(来自http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html)
- 技术创业需胆识 谈IT技术人员的创业 (http://www.cnblogs.com/dudu/archive/2007/05/27/761740.html)
- 转: UML类图关系大全 (http://www.cnblogs.com/riky/archive/2007/04/07/704298.html)
- C#读Excel文件并插入到数据库中(转自:http://www.cnblogs.com/michaelxu/archive/2009/03/12/1409761.html)
- java常用设计模式(转载http://www.cnblogs.com/hnrainll/archive/2011/12/29/2305582.html)
- http://www.cnblogs.com/Matrix54/archive/2012/05/03/2481260.html