Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 69126|Svar: 4

[Källa] .NET/C# Trådsäkerhetssamling (sortering)

[Kopiera länk]
Publicerad på 2017-06-06 17:13:53 | | |
Samlingar som introduceras i .NET Framework 1.0 finns i System.Collections-namnrymden. Dessa samlingar, inklusive den vanligt använda ArrayList och Hashtable, ger någon form av trådsäkerhet genom egenskapen Synchronized, som returnerar en trådsäker wrapper relaterad till samlingen. Wrappern fungerar genom att låsa hela uppsättningen för varje tilläggs- eller borttagningsoperation. Därför måste varje tråd som försöker komma åt samlingen vänta tills det är dess tur att få låset. Detta är inte skalbart och kommer att leda till en betydande prestandaförsämring för stora samlingar. Dessutom förhindrar denna design inte helt konkurrens. För mer information, se följande sida på MSDN:s webbplats: Synkronisering i generiska samlingar

Samlingsklassen som introducerades i .NET Framework 2.0 finns i namnrymden System.Collections.Generic. Dessa samlingsklasser inkluderar Lista<T>, Ordbok< TKey, TValue> etc. Dessa klasser ger högre typsäkerhet och prestanda jämfört med .NET Framework 1.0-klasser. Dock tillhandahåller inte .NET Framework 2.0-samlingsklassen någon trådsynkronisering; När man lägger till eller tar bort objekt i flera trådar samtidigt måste användarkoden tillhandahålla all synkronisering.

Vi rekommenderar att du använder samtidiga samlingsklasser i .NET Framework 4 eftersom de inte bara ger typsäkerheten hos .NET Framework 2.0-samlingsklasserna, utan också mer effektiv och komplett trådsäkerhet än trådsäkerheten som tillhandahålls av .NET Framework 1.0-samlingen.


Vissa samtidiga samlingstyper använder lättviktssynkroniseringsmekanismer såsom SpinLock, SpinWait, SemaphoreSlim och CountdownEvent, vilka är nya i .NET Framework 4. Vanligtvis använder ovanstående synkroniseringstyper "busy spinning" under en kort tid innan tråden sätts i det faktiska väntläget. Om väntetiden förväntas vara mycket kort kommer spinnet att förbruka mycket mindre beräkningsresurser än väntan, vilket innebär kärnkonverteringar som kommer att förbruka mycket resurser. För samlingsklasser som använder rotation innebär denna effektivitet att flera trådar kan lägga till och ta bort objekt i mycket hög takt. För mer information om begränsningar och blockering, se SpinLock och SpinWait. ConcurrentQueue-<T> och<T> ConcurrentStack-klasserna använder inga lås alls. Istället förlitar de sig på Interlock-funktioner för trådsäkerhet.

illustrera

Eftersom samtidiga samlingsklasser stödjer ICollection tillhandahåller de implementationer för egenskaperna IsSynchronized och SyncRoot, även om de inte är relaterade. IsSynchronized returnerar alltid false, medan SyncRoot alltid är null (inget i Visual Basic).

Följande tabell listar samlingstyperna i System.Collections.Concurrent-namnrymden.



typ
beskrivning
BlockingCollection<T>
Erbjuder<T> alla typer av strypning och blockering för implementering av IProducerConsumerCollection. För mer information, se BlockingCollection-översikt.
ConcurrentDictionary<TKey, TValue>
Key/value är en trådsäker implementation av ordboken.
ConcurrentQueue<T>
Trådsäkerhetsimplementering av FIFO (först in, först ut) köer.
ConcurrentStack<T>
Trådsäker implementering av LIFO (last-in, first-out) stackar.
ConcurrentBag<T>
Trådsäker implementering av en oordningsbaserad samling av element.
IProducerConsumerCollection<T>
typer måste implementeras iBlockingCollectionGränssnitt som används i







Föregående:.net/c# itextsharp för att generera PDF-kod
Nästa:Install-Package: "MvvmLightLibs" har redan ett beroende definierat för "CommonServiceLocator"...
Publicerad på 2017-11-08 15:24:45 |
Ja, jag lärde mig
 Hyresvärd| Publicerad på 2021-02-08 10:00:41 |
Listan är<T> trådsäker om listan inte ändras alls under iterationen.
 Hyresvärd| Publicerad på 2021-03-23 11:32:46 |
ConcurrentDictionary stödjer nya och uppdaterade uppdateringar
https://www.itsvse.com/thread-2955-1-1.html

 Hyresvärd| Publicerad på 2023-06-24 14:20:57 |
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com