Lukiya's Neverland

坚持自己的,但也不否定别人的。
Skip Navigation LinksHome - Post Archives - 2007 - 07 - 27 - 再论线程安全,关键字(C#,.Net,Cache,线程安全)

再论线程安全,关键字(C#,.Net,Cache,线程安全)

07/27/2007 10:20:11 AM - View : 1129
以前写过两篇关于使用lock解决多线程环境下共享资源访问冲突的文章。最近对此话题有了更深的了解,记录下来以备参考。
 
 System.Web.Caching这个Namespace里有一个Cache类,很常用,对提高访问速度有很大的作用。但是,我们注意到,在MSDN里,对Page类有这么一句描述:
 
此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
 
所以,可以得出这个结论,HttpRuntime.Cache是线程安全的,但是页面的Cache属性就需要注意了。
 
在雷神的开发维护周期中,始终存在着程序池启动的时候会死掉的问题,在上一次讨论线程安全话题时,我发现自己没有对静态变量缓存进行lock操作。这是很大的失误,已经修正。
 
但是在后来的运行中,虽然程序池崩溃的现象减少了,可依然时不时会发生,百思不得其解。今天在研究了大量英文文档、参考资料。上CSDN求助后,终于发现了问题的所在。
 
那就是我过于信赖MSDN上关于Cache类的描述,说是线程安全的,而忽略了其作为静态变量和非静态变量的区别。
 
此次修正,给所有的页面Cache属性操作也加上了Double Check和Lock保护,经过测试,So far so good。
 
希望就是这个原因,继续观望中。
Comments List
Poster Remember me next time.
Emotion 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
Content
Click to Refresh Validation Code.

浙ICP备09031893号