Innymi słowy, czy ten wątek implementacyjny Singleton jest bezpieczny:
public class Singleton
{
private static Singleton instance;
private Singleton() { }
static Singleton()
{
instance = new Singleton();
}
public static Singleton Instance
{
get { return instance; }
}
}
Xkończą się -1 nawet bez wątków . To nie jest kwestia bezpieczeństwa wątków. Zamiast tego inicjator x = -1uruchamia się pierwszy (znajduje się we wcześniejszym wierszu kodu, niższym numerze wiersza). Następnie uruchamia się inicjalizator X = GetX(), dzięki czemu wielkie litery są Xrówne -1. Następnie uruchamiany static C() { ... }jest „jawny” konstruktor statyczny, inicjalizator typu , który zmienia tylko małe litery x. Po tym wszystkim Mainmetoda (lub Othermetoda) może kontynuować i czytać wielkie litery X. Jego wartość będzie -1, nawet z jednym wątkiem.
Instancejednocześnie. Jeden z wątków zostanie poproszony o uruchomienie inicjatora typu (znanego również jako konstruktor statyczny). W międzyczasie wszystkie inne wątki, które chcą odczytaćInstancewłaściwość, zostaną zablokowane do momentu zakończenia inicjalizacji typu. Dopiero po zakończeniu inicjalizacji pola wątki będą mogły uzyskaćInstancewartość. Więc nikt nie widziInstancebytunull.