Sommaire

Les collections concurrentes

1. Introduction

Jusqu’à maintenant, les ressources utilisées par nos différents threads étaient propres à chaque thread et ne risquaient a priori pas d’être utilisées par d’autres. Mais quand on travaille dans un environnement « multithreading », une ressource donnée peut potentiellement être utilisée par différents threads. Il s’agit donc de travailler avec des structures « thread-safe » c’est-à-dire à même d’accepter des accès simultanés à ses données.

Les collections de ce type qui doivent être connues pour la certification 70-483 sont :

1.

BlockingCollection<T> ;

2.

ConcurrentBag<T> ;

3.

ConcurrentDictionary<T> ;

4.

ConcurrentQueue<T> ;

5.

ConcurrentStack<T>.

2. BlockingCollection<T>

La BlockingCollection est une collection qui va bloquer les accès des éléments déjà utilisés. Ainsi, un thread 1 modifie un élément : le thread 2 qui veut le supprimer attend que l’élément ne soit plus bloqué par le thread 1.

La classe est stockée dans l’espace de noms System.Collections.Concurrent.

Elle a la définition suivante :

[ComVisible(false)]  
[DebuggerDisplay("Count = {Count}, Type = {m_collection}")]  
[DebuggerTypeProxy(typeof(Concurrent.SystemThreadingCollections_ ...