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 = -1
X = GetX()
X
-1
static C() { ... }
x
Main
Other
X
-1
Instance
kerede 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 kimseInstance
varlığı göremeznull
.