Spinlock

Un article de Wikipédia, l'encyclopédie libre.

Les méthodes de synchronisation

Barrière de synchronisation - Futex - Moniteur

Mutex - Sémaphore - Spinlock

Problèmes classiques des
méthodes de synchronisation

Couplage fort - Famine

Interblocage - Inversion de priorité

En programmation informatique, le spinlock ou verrou tournant est un mécanisme simple de synchronisation basé sur l'attente active.

[modifier] Algorithme

 TestAndSet(*s, v) {
   s<-v
   return prev(s)
 } //Instruction Atomique (ie non interruptible)
 
 init(s) {
   TestAndSet(&s,1)
 }
 
 wait(s) {
   while(TestAndSet(&s,1))
   {
     //Attente active
   }
 }
 
 signal(s) {
   TestAndSet(&s,0)
 }

[modifier] Quand utiliser le spinlock ?

L'attente active rend le spinlock gourmand en ressources. C'est pourquoi il ne faut l'utiliser que dans une des situations suivantes:

  • lorsque le changement de contexte est impossible (par exemple en l'absence de système d'exploitation)
  • lorsque le changement de contexte est plus long que le temps d'attente moyen (contrainte temps réel souple) ou maximum (contrainte temps réel dur). Ce n'est en général le cas que dans les systèmes à multiprocesseurs. En effet, le verrou tournant est souvent utilisé pour synchroniser le noyau linux sur des systèmes SMP ( il est même souvent couplé avec une autre méthode de synchronisation ).

[modifier] Variantes

Il existe des variantes du verrou tournant visant à le rendre plus efficace :

  • Le verrou tournant lecture/ecriture qui est formé de 2 verrous : un pour la lecture et l'autre pour l'écriture. L'amélioration vient du fait que le verrou de lecture bloque seulement les accès en écriture et non les tentatives de lectures.
  • Le verrou séquentiel.