我正在创建这样的对象:
if (_cleaner == null)
{
_creation.WaitOne();
try
{
if (_cleaner == null)
{
//create object
}
}
finally
{
_creation.ReleaseMutex();
}
}
我进行仔细检查的原因是因为两个线程可以同时创建对象,然后我显然只需要一个来创建一个对象。有没有更好的方法呢? 所以我不必检查对象存在两次?
答案 0 :(得分:3)
您可能希望使用Lazy<T>
,语法更清晰,更少error-prone than double check locking。
它可以帮助你创建一个只在初次访问时初始化一次的对象(lazy initialization),我认为语法是不言自明的,一些用法示例在this MSDN article,我&# 39;举个例子:
class Customer
{
private Lazy<Orders> _orders;
public string CustomerID {get; private set;}
public Customer(string id)
{
CustomerID = id;
_orders = new Lazy<Orders>(() =>
{
// You can specify any additonal
// initialization steps here.
return new Orders(this.CustomerID);
});
}
public Orders MyOrders
{
get
{
// Orders is created on first access here.
return _orders.Value;
}
}
}
答案 1 :(得分:0)
也许使用一个有生命周期管理器的框架(例如Unity)来帮助管理你的对象? 顺便说一句,Unity做得更多。