Ejemplo Reader-Writer Synchronization Technology
Actualización: noviembre 2007
Este ejemplo muestra el uso de la clase de sincronización de subprocesos ReaderWriterLock. La funcionalidad del tipo ReaderWriterLock permite al desarrollador escribir código que exija el acceso exclusivo a un recurso compartido mientras un subproceso escribe o modifica el recurso, pero permita el acceso no exclusivo al leer o consultar el recurso.
Para obtener más información sobre el uso de los ejemplos, consulte los temas siguientes:
Para generar el ejemplo desde el símbolo del sistema
Abra una ventana del símbolo del sistema y navegue hasta el subdirectorio específico de uno de los lenguajes para tener acceso al ejemplo.
Escriba msbuild ReaderWriterSynchronizationCS.sln o msbuild ReaderWriterSynchronizationVB.sln en la línea de comandos, en función del lenguaje de programación elegido.
Para generar el ejemplo mediante Visual Studio
Abra el Explorador de Windows y navegue hasta el subdirectorio específico de uno de los lenguajes para tener acceso al ejemplo.
Haga doble clic en el icono de ReaderWriterSynchronizationCS.sln o ReaderWriterSynchronizationVB.sln, dependiendo del lenguaje de programación elegido, para abrir el archivo en Visual Studio.
En el menú Generar, haga clic en Generar solución.
Para ejecutar el ejemplo
Navegue hasta el directorio que contiene el nuevo archivo ejecutable.
Escriba ReaderWriter.exe en la línea de comandos.
Nota: Este ejemplo genera una aplicación de consola. Para poder ver el resultado, debe iniciarla desde el indicativo del sistema. Al ejecutar el ejemplo, observe que el resultado Start Writing y Stop Writing de cada sistema de escritura se produce correctamente. Esto se debe a que los sistemas de escritura tienen acceso exclusivo al recurso, a diferencia de los sistemas de lectura.
Comentarios
Para obtener más información sobre la sincronización de subprocesos y el acceso exclusivo, lea los comentarios de los archivos del código fuente y de build.proj.
Las viñetas siguientes describen brevemente las clases y las tecnologías que se utilizan en este ejemplo.
- Sincronización de subprocesos
ReaderWriterLockSe utiliza para proteger un recurso lógico implementado como llamada a Sleep. Los subprocesos que utilizan el tipo ReaderWriterLock pueden contener el bloqueo de dos maneras diferentes. En primer lugar, un subproceso puede contener un bloqueo de lectura, que es no exclusivo, y permitirá a otros subprocesos obtener un bloqueo de lectura para la clase. En segundo lugar, un subproceso puede solicitar un bloqueo de escritura, que es exclusivo, y no se concede hasta que se liberen los bloqueos de lectura y escritura existentes actualmente.
AutoResetEventEn el ejemplo, el subproceso principal espera hasta que se establezca un objeto AutoResetEvent, lo que indica que las últimas funciones asincrónicas han terminado de hacer su trabajo.
InterlockedEn el ejemplo se utilizan los métodos estáticos Interlocked.Increment y Interlocked.Decrement para obtener acceso de forma asincrónica a una variable de contador a fin de indicar cuándo debe establecerse el objeto AutoResetEvent.
Subprocesamiento
- ThreadPool Durante la escritura de código administrado, es aconsejable que, siempre que sea posible, los desarrolladores utilicen el método QueueUserWorkItem para implementar las llamadas al método asincrónico. Este ejemplo utiliza este enfoque para ejecutar código que compite por un recurso lógico.
Delegados
- WaitCallback Se emplea para crear un método de devolución de llamada con seguridad de tipos para la clase ThreadPool utilizada.
Vea también
Conceptos
Subprocesos y subprocesamiento