Kolekcie zavedené v .NET Framework 1.0 možno nájsť v mennom priestore System.Collections. Tieto kolekcie, vrátane bežne používaných ArrayList a Hashtable, poskytujú určitú formu ochrany vlákien prostredníctvom vlastnosti Synchronized, ktorá vracia vláknovo bezpečný obal súvisiaci s kolekciou. Obalovač funguje tak, že zablokuje celú sadu pre každú operáciu pridávania alebo odstraňovania. Preto každé vlákno, ktoré sa snaží získať prístup ku zbierke, musí počkať, kým príde na rad na získanie zámku. To nie je škálovateľné a povedie k výraznému zhoršeniu výkonu pri veľkých kolekciách. Okrem toho tento dizajn úplne nebráni sporu. Pre viac informácií si pozrite nasledujúcu stránku na webovej stránke MSDN: Synchronizácia v generických kolekciách
Trieda kolekcií zavedená v .NET Framework 2.0 sa nachádza v mennom priestore System.Collections.Generic. Tieto triedy zahŕňajú Zoznam<T>, Slovník< TKey, TValue> atď. Tieto triedy poskytujú vyššiu bezpečnosť typov a výkon v porovnaní s triedami .NET Framework 1.0. Trieda kolekcie .NET Framework 2.0 však neposkytuje žiadnu synchronizáciu vlákien; Pri pridávaní alebo odstraňovaní položiek na viacerých vláknach súčasne musí používateľský kód zabezpečiť všetku synchronizáciu.
Odporúčame používať triedy súbežnej kolekcie v .NET Framework 4, pretože poskytujú nielen typovú bezpečnosť tried kolekcie .NET Framework 2.0, ale aj efektívnejšiu a kompletnejšiu bezpečnosť vlákien než bezpečnosť vlákien poskytovanú kolekciou .NET Framework 1.0.
Niektoré typy súbežných kolekcií používajú ľahké synchronizačné mechanizmy ako SpinLock, SpinWait, SemaphoreSlim a CountdownEvent, ktoré sú novinkou v .NET Framework 4. Typicky vyššie uvedené typy synchronizácie používajú "zaneprázdnené otáčanie" krátky čas predtým, než sa vlákno dostane do skutočného čakacieho stavu. Ak sa očakáva, že čas čakania bude veľmi krátky, spin spotrebuje oveľa menej výpočtových zdrojov než čakanie, ktoré zahŕňa konverzie jadra, ktoré spotrebujú veľa zdrojov. Pre triedy kolekcií, ktoré používajú rotáciu, táto efektivita znamená, že viaceré vlákna dokážu pridávať a odstraňovať položky veľmi rýchlo. Pre viac informácií o obmedzovaní a blokovaní pozri SpinLock a SpinWait. Triedy ConcurrentQueue<T> a ConcurrentStack vôbec<T> nepoužívajú zámky. Namiesto toho sa spoliehajú na vzájomne blokované operácie pre bezpečnosť vlákien.
ilustrovať
Keďže triedy súbežnej kolekcie podporujú ICollection, poskytujú implementácie pre vlastnosti IsSynchronized a SyncRoot, aj keď spolu nesúvisia. IsSynchronized vždy vracia false, zatiaľ čo SyncRoot je vždy null (Nothing vo Visual Basic).
Nasledujúca tabuľka uvádza typy kolekcií v mennom priestore System.Collections.Concurrent.
typ | popis | BlockingCollection<T> | Poskytuje<T> akýkoľvek typ obmedzovania a blokovania pre implementáciu IProducerConsumerCollection. Pre viac informácií pozri prehľad BlockingCollection. | ConcurrentDictionary<TKey, TValue> | Key/value je implementácia slovníka bezpečná pre vlákna. | ConcurrentQueue<T> | Implementácia bezpečnosti vlákien vo frontách FIFO (first in, first out). | ConcurrentStack<T> | Implementácia LIFO (last in, first-out) stackov bezpečná pre vlákna. | ConcurrentBag<T> | Implementácia bezpečnej implementácie kolekcie prvkov v nesprávnom poradí. | IProducerConsumerCollection<T> | Typy musia byť implementované vBlockingCollectionRozhrania používané v
|
|