阅读后,LazyInitializer
它是:
它提供了另一种初始化模式,有多个线程竞相初始化。
这是一个示例:
Expensive _expensive;
public Expensive Expensive
{
get // Implement double-checked locking
{
LazyInitializer.EnsureInitialized (ref _expensive,() => new Expensive());
return _expensive;
}
}
问题 #1
看着 :
为什么#A 说它实现了双重检查锁定?它只是一个获得财产?
问题2
#B(lambda 表达式)是线程安全的吗?
问题 #3
所以我通过查看样本搜索了这个“种族初始化”的事情:
volatile Expensive _expensive;
public Expensive Expensive
{
get
{
if (_expensive == null)
{
var instance = new Expensive();
Interlocked.CompareExchange (ref _expensive, instance, null);
}
return _expensive;
}
}
然后我想:初始化不是种族是线程安全的吗?
e/g/ 如果有 2 个线程进入:
昂贵的对象将被创建两次!
再说一次,3个问题
1)为什么#A说它实现了双重检查锁定?它只是一个获得财产?
2)#B(lambda 表达式)是线程安全的吗?
3)初始化不是线程安全的