Po .NET 4.0 je bil v .NET Frameworku na voljo varen tip za leno nalaganjeLen Lazy lahko deluje v večnitnem okolju, kar je zagotovljenoGetValueFunkcija se izvede le enkrat, s čimer se implementiraSingleton način
V preteklosti smo kvadratne sodne ključavnice uporabljali za implementacijo enojnih vzorcev ali za uporabo statičnih inicializacijskih funkcij razredov Pri Lazy tipu je ta postopek poenostavljen in zmogljivost boljša
Ko je Lazy ustvarjen, lahko določite način namestitve niti, trenutno sta na voljo dva načina,Samo publikacija,Izgonita in objava
Način PublicationOnly
1. Zaženi funkcijo inicializacije in jo vključi v notranji prostorŠkatlatip, reši problem ničelne vrednostne sodbe, če je primer ustvarjen, bo vrnil ničlo,Postopek je nevaren glede niti
2. Določite, ali je m_boxed prazno, m_boxed je polje shranjeno z vrednostjo; če je enako praznemu, je nastavljeno na boxed, ta metoda lahko zagotovi atomičnost,Postopek je varen za niti
3. Če CreateValue vrne prazno, to pomeni, da so druge niti že ustvarile instance, nato pa nastavile na že ustvarjene primere
4. Označite metodo inicializacije kot inicializirano, kar se običajno zgodi v primeru sočasnega izvajanja, in večkrat zaženite CreateValue
Samo publikacijaNačin se uporablja na podlagiInterlocked.CompareExchange, ta razred vsebuje metode atomskeCAS (primerjava in zamenjava)
CAS je implementiran z uporabo atomskih ukazov, ki jih zagotavlja CPU, različne različice v času izvajanja pa imajo lahko različne implementacije Specifična implementacija medsebojno zaklenjenih V izvorni metodi lahko zainteresirani prijatelji preverijo specifično implementacijo preko kode coreclr/jvm
V tem načinu,Funkcija za enojno se lahko izvaja večkrat, vendar je na koncu zagotovljeno, da bo dosežena le ena instanca
Način ExcutionAndPublication
Izgonita in objavanačin, uporabljen v tem načinuVolatile+Monitor,MonitorJeključavnicaImplementacija te izjave, Monitor implementacija v izvorni kodi, je težka zaklep
MonitorPodprta sta spanja vrste in niti, kar lahko zagotovi, da se celoten blok metode izvaja v enonitnem stanju
Izvirna povezava:Prijava do hiperpovezave je vidna. |