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