Thread-Safe Singleton?
Incorrect (not thread-safe)
public class Singleton
{
private static Singleton _instance;
}
Correct using double-check locking
public sealed class Singleton
{
private static Singleton _instance;
private static readonly object _lock = new object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock(_lock)
{
if (_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
}
Best and simplest
public sealed class Singleton
{
public static readonly Singleton Instance = new Singleton();
private Singleton(){}
}