应用程序级缓存对象应该是线程安全的吗?
问题描述:
我在考虑使用具有应用程序级范围的HttpContext.Current.Cache
。我知道Cache对象是线程安全的,但我不明白的是缓存对象不是线程安全的,因此如何可以安全地使用和修改它们的线程?应用程序级缓存对象应该是线程安全的吗?
答
确保置于缓存中的对象是线程安全的是您自己的责任。
答
根据MSDN文章Cache
类型是线程安全的但缓存not thread safe
对象可能会导致意外错误。
下面是Thread-safe cache libraries for .NET和对象缓存(共享点)MSDN文章非常好的螺纹(计算器) - Object Caching Techniques
答
如果不同的线程中要使用,并同时修改缓存的对象,那么你将需要一些应用级协议。这可以简单如lock(cachedObject) {....}
如果您可以确定缓存中的内容一次只能由单个线程访问,或者它不能被修改(因为它是不可变的),那么您不需要任何东西进一步。
HttpContext.Current.Cache
是什么意思是线程安全的是多线程可以同时获取和放入东西。所以如果你想在多个键之间进行一些协调,那么你将需要一些更高级别的锁定。
没错。任何一个对象都应该是线程安全的,或者应该将它们全部替换为新实例(将它们作为不可变对象进行威胁)。最好的办法是*不*更新缓存中的部分对象。只需使用不可变对象的只读列表。 – Steven
为什么downvote? –