Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 69126|Svare: 4

[Kilde] .NET/C# Trådsikkerhetssamling (sortering)

[Kopier lenke]
Publisert på 06.06.2017 17:13:53 | | |
Samlinger introdusert i .NET Framework 1.0 finnes i System.Collections-navnerommet. Disse samlingene, inkludert den vanlig brukte ArrayList og Hashtable, gir en form for trådsikkerhet gjennom Synchronized-egenskapen, som returnerer en trådsikker wrapper relatert til samlingen. Wrapperen fungerer ved å låse hele settet for hver til- eller fjerningsoperasjon. Derfor må hver tråd som prøver å få tilgang til samlingen vente til det er dens tur for å få tak i låsen. Dette er ikke skalerbart og vil føre til betydelig ytelsesforringelse for store samlinger. I tillegg forhindrer ikke dette designet fullstendig konkurranse. For mer informasjon, se følgende side på MSDNs nettside: Synkronisering i generiske samlinger

Samlingsklassen introdusert i .NET Framework 2.0 finnes i System.Collections.Generic navnerommet. Disse samlingsklassene inkluderer Liste<T>, Ordbok< TKey, TValue> osv. Disse klassene gir høyere typesikkerhet og ytelse sammenlignet med .NET Framework 1.0-klasser. Imidlertid tilbyr ikke .NET Framework 2.0-samlingsklassen noen trådsynkronisering; Når man legger til eller fjerner elementer på flere tråder samtidig, må brukerkoden sørge for all synkronisering.

Vi anbefaler at du bruker samtidige samlingsklasser i .NET Framework 4 fordi de ikke bare gir typesikkerheten til .NET Framework 2.0-samlingsklassene, men også mer effektiv og komplett trådsikkerhet enn trådsikkerheten som tilbys av .NET Framework 1.0-samlingen.


Noen samtidige samlingstyper bruker lette synkroniseringsmekanismer som SpinLock, SpinWait, SemaphoreSlim og CountdownEvent, som er nye i .NET Framework 4. Vanligvis bruker de ovennevnte synkroniseringstypene «busy spinning» i en kort periode før tråden settes i den faktiske ventetilstanden. Hvis ventetiden forventes å bli veldig kort, vil spinnet bruke mye mindre beregningsressurser enn ventetiden, noe som innebærer kjernekonverteringer som vil bruke mye ressurser. For samlingsklasser som bruker rotasjon, betyr denne effektiviteten at flere tråder kan legge til og fjerne elementer i svært raskt tempo. For mer informasjon om begrensning og blokkering, se SpinLock og SpinWait. ConcurrentQueue-<T> og<T> ConcurrentStack-klassene bruker ikke låser i det hele tatt. I stedet er de avhengige av sammenkoblede operasjoner for trådsikkerhet.

illustrere

Fordi samtidige samlingsklasser støtter ICollection, tilbyr de implementasjoner for IsSynchronized- og SyncRoot-egenskapene, selv om de ikke er relatert. IsSynchronized returnerer alltid false, mens SyncRoot alltid er null (ingenting i Visual Basic).

Følgende tabell viser samlingstypene i System.Collections.Concurrent-navnerommet.



type
beskrivelse
BlockingCollection<T>
Tilbyr<T> alle typer throttling og blokkering for implementering av IProducerConsumerCollection. For mer informasjon, se oversikt over BlockingCollection.
ConcurrentDictionary<TKey, TValue>
Key/value er trådsikker implementering av ordboken.
ConcurrentQueue<T>
Trådsikkerhetsimplementering av FIFO (first in, first out) køer.
ConcurrentStack<T>
Trådsikker implementering av LIFO (last-in, first-out) stabler.
ConcurrentBag<T>
Trådsikker implementering av en uordnet samling av elementer.
IProducerConsumerCollection<T>
typer må implementeres iBlockingCollectionGrensesnitt brukt i







Foregående:.net/c# itextsharp for å generere PDF-kode
Neste:Install-Package: "MvvmLightLibs" har allerede en avhengighet definert for "CommonServiceLocator"...
Publisert på 08.11.2017 15:24:45 |
Ja, jeg lærte det
 Vert| Publisert på 08.02.2021 10:00:41 |
List er<T> trådsikker hvis listen ikke endres i det hele tatt under iterasjonen.
 Vert| Publisert på 23.03.2021 11:32:46 |
ConcurrentDictionary støtter nye og oppdaterte oppdateringer
https://www.itsvse.com/thread-2955-1-1.html

 Vert| Publisert på 24.06.2023 14:20:57 |
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com