Po .NET 4.0 .NET Framework buvo pateiktas saugus tingus įkėlimo tipasTingus Lazy gali veikti kelių gijų aplinkoje, garantuotaiGauti vertęFunkcija vykdoma tik vieną kartą, taip įgyvendinantViengubas režimas
Anksčiau mes naudojome kvadratinius sprendimo užraktus, kad įgyvendintume pavienius modelius arba panaudotume statines klasių inicijavimo funkcijas Naudojant "Lazy" tipą, šis procesas yra supaprastintas, o našumas geresnis
Sukūrę tinginį, galite nurodyti sriegio diegimo režimą, šiuo metu yra du režimai,Tik publikacija,ExcutionAndPublication
Tik publikavimo režimas
1. Paleiskite inicijavimo funkciją ir įdėkite ją į vidinįDėžėtipas, išspręsti nulinės vertės sprendimo problemą, jei byla buvo sukurta, ji grąžins nulį,Procesas yra nesaugus
2. Nustatykite, ar m_boxed tuščia, m_boxed laukas išsaugotas pagal vertę, jei jis lygus tuščiam, jis nustatytas į dėžutę, šis metodas gali užtikrinti atomiškumą,Procesas yra saugus siūlams
3. Jei CreateValue grįžta tuščia, tai reiškia, kad kitos gijos jau sukūrė egzempliorius, tada nustatykite jau sukurtus egzempliorius
4. Pažymėkite inicijavimo metodą kaip inicijuotą, kuris paprastai įvyksta tuo pačiu metu, ir kelis kartus paleiskite CreateValue
Tik publikacijarežimas naudojamas remiantisInterlocked.CompareExchange, šioje klasėje yra atomiškumo metodaiCAS (Palyginti ir keisti)
CAS įgyvendinamas naudojant procesoriaus pateiktas atomines instrukcijas, o skirtingos vykdymo versijos gali turėti skirtingą įgyvendinimą Blokuotas konkretus įgyvendinimas Vietiniu metodu suinteresuoti draugai gali patikrinti konkretų įgyvendinimą naudodami coreclr/jvm kodą
Šiuo režimuVieno tono funkcija gali veikti kelis kartus, tačiau galiausiai garantuojama, kad bus gautas tik vienas egzempliorius
ExcutionAndPublication režimas
ExcutionAndPublicationrežimu naudojamas režimasNepastovus+monitorius,MonitoriusTai yraužraktasTeiginio įgyvendinimas, "Monitor" įgyvendinimas gimtajame kode, yra sunkus užraktas
MonitoriusPalaikomas eilės ir gijų miego režimas, kuris gali užtikrinti, kad visas metodo blokas būtų vykdomas vienos gijos būsenoje
Originali nuoroda:Hipersaito prisijungimas matomas. |