Question

  1. Peut deux processeurs tenir deux verrous de spin "différents" simultanément en même temps?

  2. Alors ... est-ce que cela signifie: un Sigle (monoprocesseur) CPU ne peut pas contenir deux "différents" spinlocks en même temps

  3. Alors ... est-ce que cela signifie:. Le nombre de spinlocks sur un seul processeur ne peut pas être> 1

PS: "différent" impliquant spinlock associée à différentes ressources mémoire

.

Quelqu'un sait-il comment spinlocks travail à l'interne? ... Je veux dire, gèlent-ils le bus lors des opérations de jeu de test? J'ai googlé, mais pas de réponse absolue.

Était-ce utile?

La solution

Un spin-lock est plus ou moins seulement un int commune, à laquelle les écritures sont synchronisées. Il n'y a pas de drapeau spécial pour le processeur. Ainsi, vous pouvez acquérir plus d'un tour-lock. (Vous ne devriez pas ...)

Pour éviter monoprocesseur système de se bloquer, fenêtres soulève l'IRQL à DISPATCH_LEVEL. Le processeur ne peut avoir qu'un « fil » en cours d'exécution à DISPATCH_LEVEL, de sorte de verrouillage multiples verrous de spin en même temps, est en sécurité sur ces systèmes.

La mise en œuvre devrait être comme ceci: (pas 100% vrai, et peut diverger en raison de détails)

LONG lock = 0;

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

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

InterlockedExchange garantit que l'échange se atomiquement pour tous les processeurs sur le même bus mémoire. Il doit donc verrouiller le bus mémoire, ou tout au moins la force propriété exclusive de la ligne de cache spécifique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top