Bloqueos de número en cola

Los bloqueos de número en cola son una variante de bloqueos de giro que funcionan bien para bloqueos altamente contendidos. Los bloqueos por subprocesos no puestos en cola son una mejor opción para bloqueos ligeramente contendidos.

El controlador proporciona almacenamiento para el bloqueo de giro e inicializa con KeInitializeSpinLock. El controlador usa KeAcquireInStackQueuedSpinLock para adquirir el bloqueo de número en cola y KeReleaseInStackQueuedSpinLock para liberarlo.

El controlador asigna una estructura KLOCK_QUEUE_HANDLE que pasa por puntero a KeAcquireInStackQueuedSpinLock. El controlador pasa la misma estructura por puntero a KeReleaseInStackQueuedSpinLock cuando libera el bloqueo de giro.

Normalmente, los controladores deben asignar la estructura en la pila cada vez que adquieren el bloqueo. Un controlador no debe asignar la estructura como parte de su contexto de dispositivo y, a continuación, compartir la misma estructura desde varios subprocesos.

Los controladores no deben mezclar llamadas a las rutinas de bloqueo de giro en cola y las rutinas de KeXxxSpinLock normales en el mismo bloqueo de giro.

Si el controlador ya está en IRQL = DISPATCH_LEVEL, puede llamar a KeAcquireInStackQueuedSpinLockAtDpcLevel y KeReleaseInStackQueuedSpinLockFromDpcLevel en su lugar.