不用让进程每次加锁,而是在实例未被创建时再加把锁,同时也能保证线程安全,这种做法称之为“Double-Check Locking”
class Singleton
{
private static Singleton GetInstance;
private static readonly object syncRoot=new object();
private Singleton(){}
public static Singleton GetInstance()
{
if(instance==null)//先判断实例是否存在,不存在再加锁处理
{
lock(syncRoot) //在同一个时刻加了锁的那部分程序只有一个线程可以进入
{
if(instance == null)//如果有多个线程进入了第一个循环在等待进入,没有该条件会创建多个实例
{
instance = new Singleton();
}
}
}
return instance;
}
};