Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 69126|Resposta: 4

[Fonte] Coleção de Segurança de Fios .NET/C# (colação)

[Copiar link]
Publicado em 06/06/2017 17:13:53 | | |
Coleções introduzidas no .NET Framework 1.0 podem ser encontradas no namespace System.Collections. Essas coleções, incluindo as comumente usadas ArrayList e Hashtable, fornecem algum tipo de segurança de threads por meio da propriedade Synchronized, que retorna um wrapper thread-safe relacionado à coleção. O wrapper funciona bloqueando todo o conjunto para cada operação de adição ou remoção. Portanto, cada thread que tenta acessar a coleção deve esperar até sua vez de adquirir o bloqueio. Isso não é escalável e resultará em uma degradação significativa de desempenho para coleções grandes. Além disso, esse design não impede completamente a disputa. Para mais informações, veja a página a seguir no site da MSDN: Sincronização em Coleções Genéricas

A classe de coleção introduzida no .NET Framework 2.0 pode ser encontrada no namespace System.Collections.Generic. Essas classes de coleção incluem Lista<T>, Dicionário< TKey, TValue> etc. Essas classes oferecem maior segurança de tipos e desempenho em comparação com as classes do .NET Framework 1.0. No entanto, a classe de coleção .NET Framework 2.0 não oferece nenhuma sincronização de threads; Ao adicionar ou remover itens em múltiplas threads ao mesmo tempo, o código do usuário deve fornecer toda a sincronização.

Recomendamos que você use classes de coleção concorrentes no .NET Framework 4, pois elas oferecem não apenas a segurança de tipos das classes de coleção do .NET Framework 2.0, mas também uma segurança de threads mais eficiente e completa do que a segurança de threads fornecida pela coleção .NET Framework 1.0.


Alguns tipos de coleções concorrentes utilizam mecanismos leves de sincronização, como SpinLock, SpinWait, SemaphoreSlim e CountdownEvent, que são novos no .NET Framework 4. Normalmente, os tipos de sincronização acima usam "giro ocupado" por um curto período de tempo antes de colocar a thread no estado real de espera. Se o tempo de espera for esperado para ser muito curto, o spin consumirá muito menos recursos de computação do que a espera, o que envolve conversões de kernel que consumirão muitos recursos. Para classes de coleção que usam rotação, essa eficiência significa que múltiplas threads conseguem adicionar e remover itens em uma taxa muito rápida. Para mais informações sobre limitação e bloqueio, veja SpinLock e SpinWait. As classes ConcurrentQueue<T> e ConcurrentStack<T> não usam locks de forma alguma. Em vez disso, eles dependem das operações Intertravadas para a segurança das threads.

ilustrar

Como classes de coleção concorrentes suportam ICollection, elas fornecem implementações para as propriedades IsSynchronized e SyncRoot, mesmo que não estejam relacionadas. IsSynchronized sempre retorna falso, enquanto SyncRoot é sempre nulo (Nada no Visual Basic).

A tabela a seguir lista os tipos de coleções no namespace System.Collections.Concurrent.



tipo
descrição
BlockingCollection<T>
Fornece<T> qualquer tipo de limitação e bloqueio para implementar o IProducerConsumerCollection. Para mais informações, veja a visão geral do BlockingCollection.
DicionárioConcurrente<TKey, TValue>
Key/value é uma implementação segura para threads do dicionário.
ConcurrentQueue<T>
Implementação de segurança de threads das filas FIFO (primeiro a entrar, primeiro a sair).
ConcurrentStack<T>
Implementação segura para threads de pilhas LIFO (last-in, first-out).
ConcurrentBag<T>
Implementação segura para threads de uma coleção de elementos fora de ordem.
IProducerConsumerCollection<T>
Os tipos devem ser implementados emBlockingCollectionInterfaces usadas na







Anterior:.net/c# itextsharp para gerar código PDF
Próximo:Install-Package: "MvvmLightLibs" já possui uma dependência definida para "CommonServiceLocator"...
Publicado em 08/11/2017 15:24:45 |
Sim, aprendi
 Senhorio| Publicado em 08/02/2021 10:00:41 |
A lista é<T> segura para threads se a lista não for modificada durante a iteração.
 Senhorio| Publicado em 23/03/2021 11:32:46 |
O ConcurrentDictionary suporta atualizações novas e atualizadas
https://www.itsvse.com/thread-2955-1-1.html

 Senhorio| Publicado em 24/06/2023 14:20:57 |
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com