Mit anderen Worten, ist dieser Singleton-Implementierungsthread sicher:
public class Singleton
{
private static Singleton instance;
private Singleton() { }
static Singleton()
{
instance = new Singleton();
}
public static Singleton Instance
{
get { return instance; }
}
}
Xenden als -1 auch ohne Einfädeln . Es ist kein Thread-Sicherheitsproblem. Stattdessen wird der Initialisierer x = -1zuerst ausgeführt (er befindet sich in einer früheren Zeile im Code, einer niedrigeren Zeilennummer). Dann wird der Initialisierer ausgeführt X = GetX(), wodurch Großbuchstaben Xgleich werden -1. Und dann wird der "explizite" statische Konstruktor, der Typinitialisierer static C() { ... }, ausgeführt, der nur Kleinbuchstaben ändert x. Nach all dem kann die MainMethode (oder OtherMethode) fortfahren und Großbuchstaben lesen X. Sein Wert wird -1auch mit nur einem Thread sein.
Instancegleichzeitig erhalten. Einer der Threads wird angewiesen, zuerst den Typinitialisierer (auch als statischer Konstruktor bezeichnet) auszuführen. In der Zwischenzeit werden alle anderen Threads, die dieInstanceEigenschaft lesen möchten, gesperrt, bis der Typinitialisierer abgeschlossen ist. Erst nach Abschluss des Feldinitialisierers können Threads denInstanceWert abrufen. So kann niemand dasInstanceSein sehennull.