【发布时间】:2009-12-02 16:05:18
【问题描述】:
我有 Lazy 类懒惰地评估一个表达式:
public sealed class Lazy<T>
{
Func<T> getValue;
T value;
public Lazy(Func<T> f)
{
getValue = () =>
{
lock (getValue)
{
value = f();
getValue = () => value;
}
return value;
};
}
public T Force()
{
return getValue();
}
}
基本上,我试图避免在评估对象后锁定对象的开销,因此我在调用时将 getValue 替换为另一个函数。
它显然在我的测试中有效,但我无法知道它是否会在生产中爆炸。
我的班级是线程安全的吗?如果没有,可以做些什么来保证线程安全?
【问题讨论】:
标签: c# multithreading thread-safety