Compartir a través de


Estructura y rutinas de ERESOURCE

En este artículo se describe la estructura ERESOURCE y las rutinas proporcionadas por el sistema que funcionan en él. Puede usar estructuras ERESOURCE para implementar el bloqueo de lectura y escritura en el controlador.

Estructura ERESOURCE

La estructura ERESOURCE se usa para administrar el acceso a los recursos compartidos. Proporciona un mecanismo para sincronizar el acceso a los recursos que se pueden compartir entre varios subprocesos.

La estructura ERESOURCE es opaca; es decir, sus miembros están reservados para uso del sistema.

El almacenamiento para ERESOURCE debe asignarse desde un grupo no paginado.

Rutinas de ERESOURCE

El sistema proporciona rutinas para adquirir y liberar estructuras ERESOURCE y 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 no puede adquirir actualmente 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 waiters exclusivos y una lista de esperas compartidas.

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. Este escenario se puede implementar directamente en términos de adquirir un ERESOURCE.

Un controlador asigna el almacenamiento para un ERESOURCE e 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 false y el ERESOURCE no se puede adquirir, la rutina devuelve FALSE. Si especifica un valor de TRUE, el subproceso actual se coloca en la lista de espera adecuada para 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: