Zbirke, uvedene v .NET Framework 1.0, so na voljo v imenskem prostoru System.Collections. Te zbirke, vključno s pogosto uporabljenim ArrayList in Hashtable, zagotavljajo neko vrsto varnosti niti preko lastnosti Synchronized, ki vrne ovitek varen za niti, povezan s zbirko. Ovojnica deluje tako, da zaklene celoten nabor za vsako operacijo dodajanja ali odstranjevanja. Zato mora vsaka nit, ki poskuša dostopati do zbirke, počakati, da pridobi zaklep. To ni razširljivo in bo povzročilo znatno poslabšanje zmogljivosti pri velikih zbirkah. Poleg tega ta zasnova ne preprečuje povsem sporov. Za več informacij si oglejte naslednjo stran na spletni strani MSDN: Sinhronizacija v generičnih zbirkah
Razred zbirke, uveden v .NET Framework 2.0, je mogoče najti v imenskem prostoru System.Collections.Generic. Ti razredi zbirke vključujejo List<T>, Dictionary< TKey, TValue> itd. Ti razredi zagotavljajo višjo varnost tipov in zmogljivost v primerjavi z razredi .NET Framework 1.0. Vendar pa razred zbirke .NET Framework 2.0 ne omogoča sinhronizacije niti; Pri dodajanju ali odstranjevanju elementov na več nitih hkrati mora uporabniška koda zagotoviti vso sinhronizacijo.
Priporočamo, da v .NET Framework 4 uporabljate razrede sočasnih zbirk, saj zagotavljajo ne le varnost tipov kot razredi zbirke .NET Framework 2.0, ampak tudi učinkovitejšo in celovitejšo varnost niti kot varnost niti v zbirki .NET Framework 1.0.
Nekatere vrste sočasnih zbirk uporabljajo lahke mehanizme sinhronizacije, kot so SpinLock, SpinWait, SemaphoreSlim in CountdownEvent, ki so novi v .NET Framework 4. Običajno zgornji tipi sinhronizacije uporabljajo "zasedeno vrtenje" za kratek čas, preden nit preidejo v dejansko čakalno stanje. Če se pričakuje, da bo čakalni čas zelo kratek, bo spin porabil bistveno manj računskih virov kot čakanje, ki vključuje pretvorbe v jedro, ki bodo porabile veliko virov. Za razrede zbirk, ki uporabljajo rotacijo, ta učinkovitost pomeni, da lahko več niti zelo hitro dodaja in odstranjuje elemente. Za več informacij o omejevanju in blokiranju glejte SpinLock in SpinWait. Razreda ConcurrentQueue<T> in ConcurrentStack sploh<T> ne uporabljata zaklepov. Namesto tega se zanašajo na medsebojno zaklenjene operacije za varnost niti.
Ponazoritev
Ker sočasni zbirni razredi podpirajo ICollection, omogočajo implementacije lastnosti IsSynchronized in SyncRoot, tudi če niso povezane. IsSynchronized vedno vrne false, medtem ko je SyncRoot vedno null (v Visual Basicu ni nič).
Naslednja tabela navaja vrste zbirk v imenskem prostoru System.Collections.Concurrent.
vrsta | opis | BlockingCollection<T> | Omogoča<T> kakršnokoli omejevanje in blokiranje za implementacijo IProducerConsumerCollection. Za več informacij glejte pregled BlockingCollection. | ConcurrentDictionary<TKey, TValue> | Ključ/vrednost je zaporedna implementacija slovarja. | ConcurrentQueue<T> | Implementacija varnosti niti v vrstah FIFO (prvi noter, prvi izhod). | ConcurrentStack<T> | Niti varna implementacija LIFO (last-in, first out) skladov. | ConcurrentBag<T> | Zaporedna implementacija zbirke elementov, ki je izven vrstnega reda. | IProducerConsumerCollection<T> | Tipe je treba implementirati vBlockingCollectionvmesniki, uporabljeni v
|
|