Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 2976|Odpověď: 2

[Zdroj] Jak Lazy v C# chrání vlákna

[Kopírovat odkaz]
Zveřejněno 02.07.2023 21:41:55 | | |
Po .NET 4.0 byl v .NET Framework zaveden bezpečný typ pro líné načítáníLíný
Lazy je schopen pracovat v vícevláknovém prostředí, což je zaručenéGetValueFunkce se vykoná pouze jednou, čímž se implementujeSingleton mód

V minulosti jsme používali kvadratické zámky hodnocení k implementaci singleton vzorů nebo k využití statických inicializačních funkcí tříd
U typu Lazy je tento proces zjednodušený a výkon je lepší

Když je Lazy vytvořen, můžete specifikovat režim instalace vlákna, momentálně jsou k dispozici dva režimy,Pouze publikaceExkutaceA Publikace

Režim Publikace pouze


1. Spusť funkci inicializace a zablokovat ji do interního systémuKrabicetyp, vyřeší problém nulového hodnotového soudu, pokud byl případ vytvořen, vrátí null,Proces je nebezpečný podle vláken

2. Určite, zda je m_boxed prázdný, m_boxed je pole uložené podle hodnoty, pokud je rovno prázdnému, je nastaveno na boxed, tato metoda může zajistit atomicitu,Proces je bezpečný pro vlákna

3. Pokud CreateValue vrátí prázdné, znamená to, že ostatní vlákna již vytvořila instance, poté nastaví na již vytvořené instance

4. Označte inicializační metodu jako inicializovanou, což obvykle nastává v případě souběžného běhu, a spusťte CreateValue několikrát


Pouze publikaceRežim se používá na základěInterlocked.CompareExchange, tato třída obsahuje metody atomickéCAS (Porovnávání a výměna)

CAS je implementován pomocí atomických instrukcí poskytovaných CPU a různé runtime verze mohou mít různé implementace
Specifická implementace propojených prvků V nativní metodě mohou zájemci ověřit konkrétní implementaci prostřednictvím kódu coreclr/jvm

V tomto režimu,Singletonová funkce může běžet vícekrát, ale nakonec je zaručeno, že získá pouze jednu instanci

Režim ExcutionAPublikace

ExkutaceA PublikaceRežim používaný v tomto režimuVolatile+MonitorMonitorTo jezamknoutImplementace příkazu, implementace Monitor v nativním kódu, je těžký zámek

MonitorPodporuje se spánek fronty a vláken, což může zajistit, že celý blok metody bude vykonán v jednovláknovém stavu


Původní odkaz:Přihlášení k hypertextovému odkazu je viditelné.




Předchozí:ASP.NET rozdíl mezi ThreadStatic, CallContext a HttpContext
Další:SQL Server dotazuje na aktuální počet připojení k databázi
 Pronajímatel| Zveřejněno 02.07.2023 21:42:16 |
 Pronajímatel| Zveřejněno 04.07.2023 19:19:45 |
Optimalizace výkonu v C#: Lazy inicializuje Lazy<T> s prodlevou
https://www.itsvse.com/thread-7700-1-1.html
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com