66 votes

Thread-safe collections .NET

Quelle est la norme de nos jours, quand on a besoin d'un "thread-safe" de la collection (par exemple Set). Puis-je synchroniser moi-même, ou est-il par nature un "thread-safe" de la collection?

99voto

dtb Points 104373

L' .NET Framework 4.0 introduit plusieurs thread-safe collections dans le Système.Les Collections.Simultanée De L'Espace De Noms:

ConcurrentBag<T>
Représente un "thread-safe", collection non ordonnée d'objets.

ConcurrentDictionary<TKey, TValue>
Représente un thread-safe collection de paires clé-valeur qui peut être accédé par plusieurs threads simultanément.

ConcurrentQueue<T>
Représente un "thread-safe" premier entré premier sorti (FIFO) de la collection.

ConcurrentStack<T>
Représente un "thread-safe" last in-first out (LIFO) de la collection.


D'autres collections .NET Framework ne sont pas thread-safe par défaut et doivent être verrouillées pour chaque opération:

lock (mySet)
{
    mySet.Add("Hello World");
}

18voto

Kevin Points 57797

Pré .net 4.0, la plupart des collections .Net ne sont pas thread-safe. Vous aurez à faire un peu de travail vous-même pour gérer la synchronisation: http://msdn.microsoft.com/en-us/library/573ths2x.aspx

Citation de l'article:

Les Collections de classes peuvent être thread coffre-fort en utilisant les éléments suivants méthodes:

Créer un thread-safe wrapper à l'aide de la Méthode synchronisée, et l'accès à l' collection exclusivement par le biais de cette wrapper.

Si la classe n'a pas une Méthode synchronisée, découlant de la de la classe et de mettre en œuvre un Synchronisé méthode à l'aide de la propriété SyncRoot.

L'utilisation d'un mécanisme de verrouillage, tels que les verrouillage de l'instruction en C# (SyncLock en Visual Basic), sur la SyncRoot propriété lors de l'accès à l' collection.

Synchronisation De La Racine De La Propriété
Instruction Lock

Object thisLock = new Object();
......
lock (thisLock)
{
    // Critical code section
}

Dans .net 4.0 a introduit le Système.Les Collections.Simultanée de l'espace de noms

Le Blocage De La Collection
Simultanées Sac
Concurrente De La File D'Attente
Simultanées Dictionnaire
Abordables Outil De Partitionnement
Outil de partitionnement
Partitionnement De T

4voto

Kai Wang Points 1500

.NET 4 fournit un ensemble de thread-safe collections de sous Système.Les Collections.Simultanées

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X