reading经过约LazyInitializer
,它是:C#懒惰初始化&&比赛初始化?
它提供了具有多线程 比赛初始化初始化的另一种方式。
这里是一个示例:
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)心不是比赛来初始化是线程安全的
评论“// Implement ...”听起来更像是一个未来计划,我会说 – Qnan 2012-07-19 07:23:55