A .NET 4.0 után a .NET Framework biztonságos, lusta betöltési típust biztosítottLusta Lazy képes többszálas környezetben működni, garantáltanGetValueA függvényt csak egyszer hajtják végre, így implementáljákSingleton mód
Korábban kvadratikus ítéletzárakat használtunk singleton minták megvalósításához, vagy osztályok statikus inicializációs függvényeinek alkalmazásához Lazy típusnál ez a folyamat leegyszerűsített és jobb a teljesítmény
Amikor a Lazy létrejött, megadhatod a száltelepítési módot, jelenleg két mód van,Csak Publication,Kijelentés és kiadás
Csak PublicationOnly mód
1. Futtasd be az inicializációs függvényt, és dobozba zárd egy belsőDobozType, oldja meg a null értékítélet problémáját, ha az eset létrejött, null értéket ad vissza,A folyamat thread-biztonsági nem
2. Határozzuk meg, hogy az m_boxed üres-e, m_boxed a mező érték által mentett, ha egyenlő az ürességgel, akkor dobozba van állítva, ez a módszer garantálhatja az atomitást,A folyamat szál biztonságos
3. Ha a CreateValue üresen ad vissza, az azt jelenti, hogy más szálak már létrehoztak példányokat, majd állítsák már létre példányokat
4. Jelöld meg az inicializációs módszert inicializáltnak, ami általában párhuzamos futtatás esetén történik, és többször futtasd a CreateValue-t
Csak Publicationa mód a következők alapján működikInterlocked.CompareExchange, ez az osztály atomiességi módszereket tartalmazCAS (Összehasonlítás és cseré)
A CAS-t a CPU által biztosított atomi utasításokkal valósítják meg, és a különböző futásidejű verziók eltérő megvalósítással rendelkezhetnek Interlocked-specifikus megvalósítás A natív módszerben érdeklődő barátok ellenőrizhetik a konkrét implementációt coreclr/jvm kódon keresztül
Ebben a módbanEgy egy-egy függvény többször is futhat, de végül garantált, hogy csak egy példány kapható meg
ExcutionAndPublication mód
Kijelentés és kiadása mód a módbanVolatile+Monitor,MonitorAzzárA kijelentés megvalósítása, a Monitor megvalósítás a natív kódban, egy súlyos zárolás
MonitorA sorban és szál alvó támogatott, ami biztosítja, hogy az egész metódusblokk egyszálas állapotban legyen végrehajtva
Eredeti link:A hiperlink bejelentkezés látható. |