Verrous de lecteur-writer

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. Consultez l'exemple de code indiqué pour la classe ReaderWriterLockSlim. ReaderWriterLockSlim est assez efficace pour être utilisé pour synchroniser des 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.

RemarqueRemarque

Le .NET Framework a deux verrous de writer de lecteur, ReaderWriterLockSlimet ReaderWriterLock.ReaderWriterLockSlim est recommandé pout tout nouveau développement.ReaderWriterLockSlim est semblable à ReaderWriterLock, mais les règles de récurrence et de mise à niveau et rétrogradation de l'état de verrou sont simplifiées.ReaderWriterLockSlim évite de nombreux cas d'interblocage 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