我想使用.NET的Lazy< T>用于实现线程安全缓存的类.假设我们有以下设置:
class Foo { Lazy<string> cachedAttribute; Foo() { invalidateCache(); } string initCache() { string returnVal = ""; //CALculaTE RETURNVAL HERE return returnVal; } public String CachedAttr { get { return cachedAttribute.Value; } } void invalidateCache() { cachedAttribute = new Lazy<string>(initCache,true); } }
我的问题是:
>这会起作用吗?
>锁定如何工作?
我觉得我在invalidateCache附近的某个地方错过了一个锁,但对于我的生活,我无法弄清楚它是什么.
我确定这个地方有问题,我只是没弄明白.
[编辑]
好吧,看起来我是对的,有些东西我没想过.如果一个线程看到一个过时的缓存,那将是一件非常糟糕的事情,所以看起来“懒惰”不够安全.虽然该属性被访问了很多,所以我正在进行预成熟优化,希望我能学到一些东西,并且有一个模式可以在将来用于线程安全缓存.我会继续努力.
P.S.:我决定使对象线程不安全,并且可以小心地控制对象的访问权限.
解决方法
原文地址:https://www.jb51.cc/csharp/100174.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。