Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 2976|Vastaus: 2

[Lähde] Kuinka laiska C#:ssa pitää ketjut turvassa

[Kopioi linkki]
Julkaistu 2.7.2023 21.41.55 | | |
.NET 4.0:n jälkeen .NET Frameworkiin tarjottiin turvallinen laiska lataustyyppiLaiska
Lazy pystyy toimimaan monisäikeisessä ympäristössä, taatustiGetValueFunktio suoritetaan vain kerran, jolloin toteutetaanSingleton-moodi

Aiemmin käytimme kvadraattisia arviointilukkoja yksittäisten mallien toteuttamiseen tai luokkien staattisten alustusfunktioiden hyödyntämiseen
Lazy-tyypissä tämä prosessi yksinkertaistuu ja suorituskyky paranee

Kun Lazy luodaan, voit määrittää säikeen asennustilan, tällä hetkellä on kaksi tilaa,Vain julkaisuExcutionAndPublication

PublicationOnly -tila


1. Suorita alustusfunktio ja laita se sisäiseen laatikkoonLaatikkotyyppi, ratkaise nollaarvon arviointiongelma, jos tapaus on luotu, se palauttaa nullin,Prosessi on säikeiden turvaton

2. Selvitä, onko m_boxed tyhjä, m_boxed onko arvolla tallennettu kenttä, jos se on tyhjä, se asetetaan laatikkoon, tämä menetelmä voi varmistaa atomisuuden,Prosessi on säikeiden turvallinen

3. Jos CreateValue palauttaa tyhjän, se tarkoittaa, että muut säikeet ovat jo luoneet instansseja ja asetetaan jo luoduiksi instansseiksi

4. Merkitse alustusmenetelmä alustuneeksi, mikä yleensä tapahtuu samanaikaisessa suorituksessa, ja suorita CreateValue useita kertoja


Vain julkaisutilaa käytetäänInterlocked.CompareExchange, tämä luokka sisältää atomisuusmenetelmiäCAS (Vertaa ja vaihda)

CAS toteutetaan CPU:n tarjoamien atomikäskyjen avulla, ja eri ajonaikaisilla versioilla voi olla erilaisia toteutuksia
Lukittu spesifinen toteutus Natiivimenetelmässä kiinnostuneet ystävät voivat tarkistaa kyseisen toteutuksen coreclr/jvm-koodilla

Tässä tilassa,Yksittäinen funktio voi toimia useita kertoja, mutta lopulta on taattu, että saadaan vain yksi instanssi

ExcutionAndPublication-tila

ExcutionAndPublicationTilassa käytetty tilaVolatile+MonitorMonitoriSe onlukkoLauseen toteutus, Monitor-toteutus natiivikoodissa, on raskas lukko

MonitoriJonotus- ja säike-lepotilaan toiminnot ovat tuettuja, mikä voi varmistaa, että koko metodilohko suoritetaan yksisäikeisessä tilassa


Alkuperäinen linkki:Hyperlinkin kirjautuminen on näkyvissä.




Edellinen:ASP.NET ero ThreadStaticin, CallContextin ja HttpContextin välillä
Seuraava:SQL Server kysyy tietokantayhteyksien nykyistä määrää
 Vuokraisäntä| Julkaistu 2.7.2023 21.42.16 |
 Vuokraisäntä| Julkaistu 4.7.2023 19.19.45 |
C#-suorituskyvyn optimointi: Lazy alustaa Lazy<T>:n viiveellä
https://www.itsvse.com/thread-7700-1-1.html
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com