En d'autres termes, ce thread d'implémentation Singleton est-il sûr:
public class Singleton
{
private static Singleton instance;
private Singleton() { }
static Singleton()
{
instance = new Singleton();
}
public static Singleton Instance
{
get { return instance; }
}
}
X
finissent par être -1
même sans thread . Ce n'est pas un problème de sécurité des threads. Au lieu de cela, l'initialiseur x = -1
s'exécute en premier (il se trouve sur une ligne antérieure du code, un numéro de ligne inférieur). L'initialiseur X = GetX()
s'exécute ensuite, ce qui rend les majuscules X
égales à -1
. Et puis le constructeur statique "explicite", l'initialiseur de type static C() { ... }
s'exécute, qui ne change que les minuscules x
. Donc après tout cela, la Main
méthode (ou la Other
méthode) peut continuer et lire en majuscules X
. Sa valeur sera -1
, même avec un seul thread.
Instance
à la fois. L'un des threads sera invité à exécuter d'abord l'initialiseur de type (également connu sous le nom de constructeur statique). Pendant ce temps, tous les autres threads souhaitant lire laInstance
propriété seront verrouillés jusqu'à la fin de l'initialiseur de type. Ce n'est qu'après la fin de l'initialisation du champ que les threads seront autorisés à obtenir laInstance
valeur. Donc, personne ne peut voir l'Instance
êtrenull
.