我对单例模式有一些疑问,并参考了这里的文档: http://msdn.microsoft.com/en-us/library/ff650316.aspx
下面的代码是从文章中摘录出来的:
using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
具体地说,在上面的例子中,有必要在加锁之前和之后两次将实例与null进行比较吗?这是必要的吗?为什么不先执行锁定操作然后再进行比较呢?
简化为以下方式是否存在问题?
public static Singleton Instance
{
get
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
return instance;
}
}
执行锁定操作是否会很耗费资源?