Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 2976|Odpoveď: 2

[Zdroj] Ako lenivosť v C# chráni vlákna

[Kopírovať odkaz]
Zverejnené 2. 7. 2023 21:41:55 | | |
Po .NET 4.0 bol v .NET Framework zabezpečený typ lenivého načítavaniaLenivý
Lazy dokáže fungovať v multi-threaded prostredí, čo je zaručenéGetValueFunkcia sa vykoná iba raz, čím sa implementujeSingleton mód

V minulosti sme používali kvadratické úsudkové zámky na implementáciu singleton vzorov alebo na využitie statických inicializačných funkcií tried
Pri Lazy type je tento proces zjednodušený a výkon je lepší

Keď sa vytvorí Lazy, môžete špecifikovať režim inštalácie vlákien, momentálne sú k dispozícii dva režimy,Iba publikáciaExcutionAPublikácia

Režim Iba publikácia


1. Spustiť inicializačnú funkciu a zaradiť ju do interného priečinkaKrabicatyp, vyriešiť problém nulového hodnotového súdu, ak bol prípad vytvorený, vráti null,Proces je nezabezpečený podľa vlákien

2. Zistite, či je m_boxed prázdny, m_boxed je pole uložené podľa hodnoty, ak je rovné prázdne, je nastavené na boxed, táto metóda môže zabezpečiť atómovosť,Proces je bezpečný pre vlákna

3. Ak CreateValue vráti prázdne, znamená to, že iné vlákna už vytvorili inštancie a potom nastavia na už vytvorené inštancie

4. Označiť inicializačnú metódu ako inicializovanú, čo sa zvyčajne vyskytuje pri súbežnom behu, a opakovane spúšťať CreateValue


Iba publikáciaRežim sa používa na základeInterlocked.CompareExchange, táto trieda obsahuje metódy atómovostiCAS (Porovnanie a výmena)

CAS je implementovaný pomocou atómových inštrukcií poskytovaných CPU a rôzne verzie behu môžu mať rôzne implementácie
Interlockovaná špecifická implementácia V natívnej metóde môžu záujemcovia skontrolovať konkrétnu implementáciu cez coreclr/jvm kód

V tomto režime,Singletonová funkcia môže bežať viackrát, ale nakoniec je zaručené, že získame iba jednu inštanciu

Režim ExcutionAndPublication

ExcutionAPublikáciaRežim používaný v tomto režimeVolatile+MonitorMonitorJe to takzámokImplementácia príkazu, implementácia Monitor v natívnom kóde, je ťažký zámok

MonitorPodporuje sa spánok fronty a vlákien, čo môže zabezpečiť, že celý blok metódy bude vykonaný v jednovláknovom stave


Pôvodný odkaz:Prihlásenie na hypertextový odkaz je viditeľné.




Predchádzajúci:ASP.NET rozdiel medzi ThreadStatic, CallContext a HttpContext
Budúci:SQL Server sa pýta na aktuálny počet pripojení k databáze
 Prenajímateľ| Zverejnené 2. 7. 2023 21:42:16 |
 Prenajímateľ| Zverejnené 4. 7. 2023 19:19:45 |
Optimalizácia výkonu v C#: Lazy inicializuje Lazy<T> s oneskorením
https://www.itsvse.com/thread-7700-1-1.html
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com