2010-03-08 6 views
3

Dans une application multithread. J'ai un tas de fonctions qui parcourent une collection pour lire l'information. J'ai aussi beaucoup de fonctions qui modifient cette même collection.Isolation de lecture et d'écriture multithread

Je cherche un moyen d'isoler toutes les lectures et les écrire ensemble. Je ne veux pas qu'une écriture soit faite pendant qu'une lecture est en cours. Je pensais utiliser SyncLock sur l'objet de collection, mais cela bloquerait plusieurs lectures essayant de travailler en parallèle.

Répondre

3

Avez-vous envisagé ReaderWriterLockSlim? Vous pourriez vouloir check that using it is faster than a simple Monitor lock cependant. Ne considérez pas l'ancien ReaderWriterLock. Voici ce que Jeffrey Richter a à dire à ce sujet:

La bibliothèque de classes .NET Framework Microsoft comprend une ReaderWriterLock classe dans l'espace de noms System.Threading qui vous permet d'obtenir multiples lecteur/unique auteur sémantique. Bien qu'il soit agréable qu'une classe comme celui-ci existe , il y a plusieurs problèmes avec sa mise en œuvre et je vous recommande de ne pas utiliser .