Les Spinlocks sont plus rapides quand ils ne bloquent pas, c'est pourquoi ils sont utiles dans les situations où il y a très peu de contention dans le verrou (c'est-à-dire un très faible risque de blocage).
Lorsqu'un thread est en veille, il provoque un changement de contexte (c'est-à-dire que ce thread est remplacé par un autre afin que l'autre thread puisse s'exécuter). Il y a aussi des frais généraux plus élevés pour l'acquisition d'un mutex standard que pour vérifier si un spinlock est libre. Très souvent, les spinlocks ne nécessitent qu'une seule opération atomique lorsque le verrou est libre.
Ces propriétés rendent les verrouillages utiles pour le verrouillage à granularité fine, car l'utilisation de verrous plus petits réduit la contention sur chaque verrou. Par exemple, un de mes projets a une carte avec ~ 200 000 entrées auxquelles 16 + threads accèdent en même temps (type de serveur d'entreprise). Avoir un spinlock par entrée est assez efficace parce que la chance que deux threads dans cette application essayent de frapper la même entrée en même temps est faible.
Vous pouvez vérifier l'entrée wikipedia (http://en.wikipedia.org/wiki/Spinlock) sur ce sujet. Cela semble très instructif. :) – gbvb