J'ai quelques questions concernant le modèle singleton tel que documenté ici : http://msdn.microsoft.com/en-us/library/ff650316.aspx
Le code suivant est un extrait de l'article :
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;
}
}
}
Plus précisément, dans l'exemple ci-dessus, est-il nécessaire de comparer l'instance à null deux fois, avant et après le verrouillage ? Est-ce nécessaire ? Pourquoi ne pas effectuer le verrouillage d'abord et faire la comparaison ensuite ?
Y a-t-il un problème à simplifier à ce qui suit ?
public static Singleton Instance
{
get
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
return instance;
}
}
L'exécution de la serrure est-elle coûteuse ?