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; }
}
}
Xfinissent 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 = -1s'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 Mainméthode (ou la Othermé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 laInstanceproprié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 laInstancevaleur. Donc, personne ne peut voir l'Instanceêtrenull.