Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 69126|Odpověď: 4

[Zdroj] .NET/C# Sbírka bezpečnosti vláken (kolace)

[Kopírovat odkaz]
Zveřejněno 06.06.2017 17:13:53 | | |
Kolekce zavedené v .NET Frameworku 1.0 lze nalézt v jmenném prostoru System.Collections. Tyto kolekce, včetně běžně používaných ArrayList a Hashtable, poskytují určitou formu ochrany vláken prostřednictvím vlastnosti Synchronized, která vrací obal bezpečný pro vlákna související s kolekcí. Obal funguje tak, že uzamkne celou sadu pro každou operaci přidávání nebo odstranění. Proto musí každé vlákno, které se snaží získat přístup ke sbírce, počkat až na svou řadu k získání zámku. To není škálovatelné a povede k výraznému snížení výkonu u velkých kolekcí. Navíc tento design zcela nebrání sporům. Pro více informací viz následující stránka na webu MSDN: Synchronizace v obecných kolekcích

Třída kolekcí zavedená v .NET Frameworku 2.0 se nachází v jmenném prostoru System.Collections.Generic. Tyto kolekční třídy zahrnují Seznam<T>, Slovník< TKey, TValue> atd. Tyto třídy poskytují vyšší úroveň bezpečnosti typů a výkonu ve srovnání s třídami .NET Framework 1.0. Třída kolekce .NET Framework 2.0 však neposkytuje žádnou synchronizaci vláken; Při přidávání nebo odebírání položek na více vláknech současně musí uživatelský kód zajistit veškerou synchronizaci.

Doporučujeme používat třídy souběžné kolekce v .NET Framework 4, protože poskytují nejen typovou bezpečnost tříd .NET Framework 2.0, ale také efektivnější a úplnější bezpečnost vláken než bezpečnost vláken, kterou poskytuje kolekce .NET Framework 1.0.


Některé typy souběžných sběrů používají lehké synchronizační mechanismy, jako jsou SpinLock, SpinWait, SemaphoreSlim a CountdownEvent, které jsou novinkou v .NET Framework 4. Obvykle výše uvedené typy synchronizace používají "zaneprázdněné otáčení" na krátkou dobu, než se vlákno převede do skutečného čekacího stavu. Pokud se očekává, že doba čekání bude velmi krátká, spin spotřebuje mnohem méně výpočetních zdrojů než čekání, což zahrnuje převody jádra a velké množství zdrojů. U tříd kolekcí, které používají rotaci, tato efektivita znamená, že více vláken může přidávat a odebírat položky velmi rychle. Pro více informací o limitování a blokování viz SpinLock a SpinWait. Třídy ConcurrentQueue<T> a ConcurrentStack<T> zámky vůbec nepoužívají. Místo toho spoléhají na operace s propojeným zámkem pro bezpečnost vláken.

ilustrovat

Protože třídy souběžné kolekce podporují ICollection, poskytují implementace vlastností IsSynchronized a SyncRoot, i když spolu nesouvisí. IsSynchronized vždy vrací false, zatímco SyncRoot je vždy null (ve Visual Basicu nic).

Následující tabulka uvádí typy kolekcí v jmenném prostoru System.Collections.Concurrent.



typ
popis
BlockingCollection<T>
Poskytuje<T> jakýkoli typ zpomalování a blokování pro implementaci IProducerConsumerCollection. Pro více informací viz přehled BlockingCollection.
ConcurrentDictionary<TKey, TValue>
Key/value je implementace slovníku bezpečná pro vlákna.
ConcurrentQueue<T>
Implementace bezpečnosti vláken ve frontách FIFO (první dovnitř, první ven).
ConcurrentStack<T>
Implementace LIFO (last in, first-out) stacků bezpečná pro vlákna.
ConcurrentBag<T>
Implementace bezpečné pro vlákna kolekce prvků mimo pořadí.
IProducerConsumerCollection<T>
Typy musí být implementovány vBlockingCollectionRozhraní používaná v







Předchozí:.net/c# itextsharp pro generování PDF kódu
Další:Install-Package: "MvvmLightLibs" už má definovanou závislost pro "CommonServiceLocator"...
Zveřejněno 08.11.2017 15:24:45 |
Ano, naučil jsem se
 Pronajímatel| Zveřejněno 08.02.2021 10:00:41 |
Seznam je<T> bezpečný pro vlákna, pokud během iterace není vůbec upraven.
 Pronajímatel| Zveřejněno 23.03.2021 11:32:46 |
ConcurrentDictionary podporuje nové i aktualizované aktualizace
https://www.itsvse.com/thread-2955-1-1.html

 Pronajímatel| Zveřejněno 24.06.2023 14:20:57 |
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com