Partager via


Verrous de lecteur-writer

Mise à jour : novembre 2007

La classe ReaderWriterLockSlim permet à plusieurs threads de lire une ressource simultanément, mais nécessite qu'un thread attende un verrou exclusif afin d'écrire dans la ressource.

Dans votre application, vous pouvez utiliser un ReaderWriterLockSlim pour fournir une synchronisation coopérative parmi les threads qui accèdent à une ressource partagée. Les verrous sont pris sur le ReaderWriterLockSlim lui-même.

Comme avec tout mécanisme de synchronisation de threads, vous devez veiller à ce qu'aucun thread n'ignore le verrouillage fourni par ReaderWriterLockSlim. Une façon de garantir cela est de créer une classe qui encapsule la ressource partagée. Cette classe fournirait des membres qui accèdent à la ressource partagée privée et qui utilisent un ReaderWriterLockSlim privé pour la synchronisation. Pour en obtenir une illustration, consultez l'exemple de code pour la classe ReaderWriterLockSlim. ReaderWriterLockSlim est assez efficace pour être utilisé à des fins de synchronisation d'objets individuels.

Structurez votre application pour minimiser la durée des opérations de lecture et d'écriture. Les longues opérations d'écriture affectent le débit directement car le verrouillage en écriture est exclusif. Les longues opérations de lecture bloquent les writers en attente et, si au moins un thread est en attente d'accès en écriture, les threads qui demandent l'accès en lecture seront également bloqués.

Remarque :

.NET Framework a deux verrous de lecteur-writer, ReaderWriterLockSlim et ReaderWriterLock. ReaderWriterLockSlim est recommandé pour développement tout nouveau. ReaderWriterLockSlim est semblable à ReaderWriterLock, mais il a simplifié des règles pour la récursivité et pour mettre à niveau et rétrograder l'état de verrou. ReaderWriterLockSlim évite de nombreux cas de blocage potentiel. De plus, la performance de ReaderWriterLockSlim est considérablement meilleure que ReaderWriterLock.

Voir aussi

Référence

ReaderWriterLockSlim

ReaderWriterLock

Autres ressources

Threading managé

Fonctionnalités et objets de threading