Pregunta

  1. Can dos CPUs tienen dos "diferentes" bloqueos de giro de forma simultánea en la misma hora?

  2. Así que ... ¿quiere esto decir:? Un (monoprocesador) sigle CPU no puede mantener dos spinlocks "diferentes" al mismo tiempo

  3. Así que ... quiere decir esto:. El número de bloqueos de bucle en una sola CPU no puede ser> 1

PS: "diferente." Spinlock implicando asocia con diferentes recursos de memoria


¿Alguien sabe cómo funciona internamente spinlocks? ... Es decir, no se congelan autobús durante operaciones de conjuntos de pruebas? He buscado en Google, pero hay una respuesta absoluta.

¿Fue útil?

Solución

Una de bloqueo del giro es más o menos solamente un int compartida, a la que se sincronizan las escrituras. No hay una bandera especial para el procesador. Así que usted puede adquirir más de un spin-cerradura. (No debería ...)

Para evitar uni-procesador de sistema se bloquee, ventanas plantea la IRQL a DISPATCH_LEVEL. El procesador sólo puede tener un 'hilo' funcionando a DISPATCH_LEVEL, de modo de bloqueo múltiple de spin-cerraduras, al mismo tiempo, es segura en estos sistemas.

La aplicación debe ser como este: (no es 100% cierto, y puede divergir debido a los detalles)

LONG lock = 0;

KeAcquireSpinlock( ... )
{
    // raise irql. etc.
    while( InterlockedExchange( &lock, 1 ) != 0 ) 
        /* do nothing*/;
}

KeReleaseSpinLock( ... )
{
     InterlockedExchange( &lock, 0 );
     // lower irql ... etc.
}

InterlockedExchange garantías de que el cambio ocurre de forma atómica para todos los procesadores en el mismo bus de memoria. Por lo que debe bloquear el bus de memoria, o al menos la fuerza la propiedad única de la línea de caché específico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top