Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 69126|Odgovoriti: 4

[Vir] .NET/C# zbirka varnosti niti (združevanje)

[Kopiraj povezavo]
Objavljeno na 6. 06. 2017 17:13:53 | | |
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







Prejšnji:.net/c# itextsharp za generiranje PDF kode
Naslednji:Install-Package: "MvvmLightLibs" že ima določeno odvisnost za "CommonServiceLocator"...
Objavljeno na 8. 11. 2017 15:24:45 |
Da, naučil sem se
 Najemodajalec| Objavljeno na 8. 02. 2021 10:00:41 |
Seznam je<T> varen za niti (thread-safe), če se seznam med iteracijo sploh ne spremeni.
 Najemodajalec| Objavljeno na 23. 03. 2021 11:32:46 |
ConcurrentDictionary podpira nove in posodobljene posodobitve
https://www.itsvse.com/thread-2955-1-1.html

 Najemodajalec| Objavljeno na 24. 06. 2023 14:20:57 |
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com