Başka bir deyişle, bu Singleton uygulama iş parçacığı güvenli midir:
public class Singleton
{
private static Singleton instance;
private Singleton() { }
static Singleton()
{
instance = new Singleton();
}
public static Singleton Instance
{
get { return instance; }
}
}
X son bulur . Bu bir iş parçacığı güvenliği sorunu değildir. Bunun yerine, başlatıcı ilk önce çalışır (kodun önceki bir satırında, daha düşük bir satır numarasındadır). Sonra başlatıcı çalışır, bu da büyük harf eşittir . Ve sonra "açık" statik yapıcı, sadece küçük harf değiştiren tür başlatıcısı çalışır . Bundan sonra, yöntem (veya yöntem) devam edebilir ve büyük harf okuyabilir . Değeri, sadece bir iş parçacığında bile olacaktır . -1 x = -1X = GetX()X-1static C() { ... }xMainOtherX-1
Instancekerede almak istediğinizi varsayalım . İpliklerden birine ilk olarak tip başlatıcısı (statik yapıcı olarak da bilinir) çalıştırması söylenecektir. Bu aradaInstanceözelliği okumak isteyen diğer tüm evreler , tip başlatıcısı bitene kadar kilitlenir . Yalnızca alan başlatıcısı tamamlandıktan sonra, iş parçacıklarının değeri almasına izin verilirInstance. Böylece kimseInstancevarlığı göremeznull.