Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 2976|Válasz: 2

[Forrás] Hogyan tartja biztonságban a C# lustasága a szálakat

[Linket másol]
Közzétéve 2023. 07. 02. 21:41:55 | | |
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 PublicationKijelenté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+MonitorMonitorAzzá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ó.




Előző:ASP.NET a különbség a ThreadStatic, a CallContext és a HttpContext között
Következő:Az SQL Server megkérdezi az adatbázishoz fűződő jelenlegi kapcsolatok számát
 Háziúr| Közzétéve 2023. 07. 02. 21:42:16 |
 Háziúr| Közzétéve 2023. 07. 04. 19:19:45 |
C# teljesítményoptimalizálás: Lazy inicializálja a Lazy<T>-t késleltetéssel
https://www.itsvse.com/thread-7700-1-1.html
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com