thread collections (ArrayList) et synchronisation
Bonjour,
Je dois travailler sur un ArrayList qui peut être lu et/ou mis à jour ds plusieurs thread. La documentation Microsoft propose plusieurs solutions.
Une première est de récupérer un "wrapper" avec ArrayList.Synchronized
Code:
1 2 3 4
| ArrayList myWrapper = ArrayList.Synchronized(myList)
foreach((Object item in myWrapper){
} |
et une autre de faire un lock(myList.SyncRoot) suivi d'un foreach.
Code:
1 2 3 4 5 6
| ArrayList myCollection = new ArrayList();
lock(myCollection.SyncRoot) {
foreach (Object item in myCollection) {
// Insert your code here.
}
} |
J'ai ecrit le 1er exemple, est-il thread-safe? Si oui en quoi diffère-t-il du second (tiré de la doc Microsoft)
Le traitement pour chaque élément de la Collection est assez long, cela va-t-il ralentir de maniere significative le reste du programme?