Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public class MyClass
{
private static readonly Lazy<MyClass> instance = new Lazy<MyClass>(() => new MyClass());
private MyClass(){}
public static MyClass Instance
{
get { return instance.Value; }
}
}
public class SomeClass
{
private SomeClass _instance;
private SomeClass() {}
private SomeClass Instance
{
if (_instance == null)
_instance = new SomeClass();
return _instance;
}
}
public sealed class Singletone
{
private static Singletone instance;
private object sync = new Object();
public static Singletone GetInstance()
{
lock(sync)
{
if(instance == null)
instance = new Singletote()
}
return instance;
}
}
public static Singleton GetInstance()
{
// Если это условие не выполнится, то никакие блокировки не нужны, поскольку
// экземпляр синглтона уже создан
if ( instance == null )
{
// Но поскольку никаких блокировок сделано не было, есть вероятность,
// что произошло переключение контекста и другой поток успел создать
// экземпляр синглтона, поэтому захватываем блокировку и проверяем
// наличие экземпляра еще раз
lock(sync)
{
if (instance == null)
{
// Да, экземпляр таки не создался, давайте-ка создадим его
instance = new Singleton();
}
}
}
return instance;
}
О синглтонах и статических конструкторах