Introducción a las rutinas de ERESOURCE

El sistema proporciona rutinas para adquirir y liberar estructuras ERESOURCE, así como para examinar su estado actual.

Adquisición y liberación de una estructura ERESOURCE

Los controladores pueden usar las estructuras ERESOURCE para implementar la sincronización exclusiva o compartida. La sincronización exclusiva o compartida funciona de la siguiente manera:

  • Cualquier número de subprocesos puede adquirir un ERESOURCE como compartido.

  • Solo un subproceso puede adquirir un ERESOURCE exclusivamente. El ERESOURCE solo se puede adquirir exclusivamente si no hay subprocesos ya adquiridos como compartidos.

Un subproceso que actualmente no puede adquirir un ERESOURCE puede colocarse opcionalmente en un estado de espera hasta que se pueda adquirir el ERESOURCE. El sistema mantiene dos listas de subprocesos que están esperando un ERESOURCE: una lista de camareros exclusivos y una lista de camareros compartidos.

Un uso típico para la sincronización exclusiva o compartida es implementar un bloqueo de lectura y escritura. Un bloqueo de lectura y escritura permite que varios subprocesos realicen una operación de lectura, pero solo un subproceso puede escribir a la vez. Esto se puede implementar directamente en términos de adquirir un ERESOURCE.

Un controlador asigna el almacenamiento para un ERESOURCE y lo inicializa con ExInitializeResourceLite. El sistema mantiene una lista de todas las estructuras ERESOURCE en uso. Cuando el controlador ya no requiere un ERESOURCE determinado, debe llamar a ExDeleteResourceLite para eliminarlo de la lista del sistema. El controlador también puede reutilizar un ERESOURCE llamando a ExReinitializeResourceLite.

Los controladores pueden realizar las siguientes operaciones básicas en un ERESOURCE:

El parámetro Wait de ExAcquireResourceSharedLite y ExAcquireResourceExclusiveLite determina si el subproceso actual espera a que se adquiera el ERESOURCE. Si especifica un valor de FALSE y no se puede adquirir ERESOURCE, la rutina devuelve FALSE. Si especifica un valor de TRUE, el subproceso actual se coloca en la lista de espera adecuada para el ERESOURCE.

Examen del estado de una estructura ERESOURCE

Un controlador también puede determinar el estado actual de un ERESOURCE, como se indica a continuación: