Bloqueos de lector y escritor
Actualización: noviembre 2007
La clase ReaderWriterLockSlim habilita a varios subprocesos para leer un recurso de forma simultánea, aunque para escribir en el recurso, el subproceso debe esperar a un bloqueo exclusivo.
Dentro de la aplicación se puede utilizar un ReaderWriterLockSlim para proporcionar una sincronización conjunta entre los subprocesos que tienen acceso a un recurso compartido. Los bloqueos se toman en el mismo ReaderWriterLockSlim.
Al igual que con cualquier mecanismo de sincronización de subprocesos, se debe comprobar que ningún subproceso omite el bloqueo proporcionado por ReaderWriterLockSlim. Una manera de asegurarse es diseñar una clase que encapsule el recurso compartido. Esta clase proporcionaría los miembros que tienen acceso al recurso compartido privado y que utilizan un ReaderWriterLockSlim privado para la sincronización. Para obtener un ejemplo, vea el ejemplo de código de la clase ReaderWriterLockSlim. ReaderWriterLockSlim es bastante eficaz para utilizarse en la sincronización de objetos individuales.
Organice su aplicación con el fin de reducir al mínimo la duración de las operaciones de lectura y escritura. Las operaciones de escritura de larga duración afectan al rendimiento porque el bloqueo de escritura es exclusivo. Las operaciones de lectura de larga duración bloquean el sistema de escritura en espera y, si hay al menos un subproceso en espera de acceso de escritura, entonces los subprocesos que soliciten acceso de lectura también se bloquearán.
Nota: |
---|
.NET Framework dispone de dos bloqueos de lector y escritor, ReaderWriterLockSlim y ReaderWriterLock. ReaderWriterLockSlim se recomienda para todas las implementaciones nuevas. ReaderWriterLockSlim es similar a ReaderWriterLock, pero tiene reglas simplificadas para recursividad y para actualizar y deshacer la actualización del estado del bloqueo. ReaderWriterLockSlim evita muchos casos de posible interbloqueo. Además, el rendimiento de ReaderWriterLockSlim es significativamente mejor que ReaderWriterLock. |