Une interrogation consiste à vérifier à plusieurs reprises si une ressource ( tout type de ressource) est prête.
Un spinlock se produit lorsque la ressource que vous interrogez est un verrou.
Notez que l'interrogation n'est pas mauvaise. En particulier, l'interrogation est efficace lorsque des données sont généralement prêtes lorsque vous interrogez. La scrutation n'est inefficace que si vous le faites sans récupérer aucune donnée en retour.
D'autre part, les interruptions sont inefficaces s'il y a tellement de données que vous êtes constamment interrompu. Ils sont efficaces si les données arrivent assez rarement pour que vous puissiez effectuer un travail utile avant d'être interrompu.
Je peux vous donner un exemple concret de ma propre expérience: il y a 15 ans, mon programme de messagerie électronique était configuré pour m'interrompre chaque fois qu'un nouveau courrier électronique arrivait. Ce qui se produisait une ou deux fois par semaine. Vérifier constamment ma boîte de réception aurait été une perte de temps colossale.
De nos jours, toutes les notifications sont désactivées. Je sais que chaque fois que je regarde dans ma boîte de réception, il y aura de nouveaux courriels. Le vote est beaucoup plus efficace maintenant.
Les verrous sont efficaces lorsque a) la probabilité que le verrou soit utilisé est faible et b) si le verrou est utilisé, il ne sera maintenu que pendant une courte période. En d'autres termes: il est efficace pour la plupart des verrous à grain fin non contrôlés, mais inefficace pour les verrous à grain grossier très dispendieux.
(Et bien sûr, les spinlocks ne fonctionnent que lorsqu'il y a un vrai parallélisme, sinon l'autre thread n'aura aucune chance de libérer le verrou. Je suppose que c'est assez évident, mais je voulais quand même le préciser.)