У мене є декілька запитань щодо синглтон-шаблону, як задокументовано тут: 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;
}
}
}
Зокрема, у наведеному вище прикладі, чи потрібно двічі порівнювати екземпляр із нулем, до і після блокування? Це необхідно? Чому б не виконати блокування спочатку і не провести порівняння?
Чи існує проблема у спрощенні до наступного?
public static Singleton Instance
{
get
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
return instance;
}
}
Виконання блокування дороге?