Spinlock

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet article sur l'informatique doit être recyclé ().

Une réorganisation et une clarification du contenu paraissent nécessaires. Améliorez-le, discutez des points à améliorer ou précisez les sections à recycler en utilisant {{section à recycler}}.

En programmation informatique et plus particulièrement en programmation concurrente, le spinlock ou verrou tournant est un mécanisme simple de synchronisation basé sur l'attente active.

Le spinlock base son principe sur l'attente active. En attendant leur tour, les threads l'utilisant vont le tester de manière répétée jusqu'à ce qu'il se libère. Pour ce faire, les threads doivent impérativement utiliser une opération atomique afin de garder le principe de l'exclusion mutuelle.

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 :

Variantes

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

Exemple

 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)
 }

Références

  1. ↑ (en) Maurice Herlihy, Nir Shavit, Victor Luchangco et Michael Spear, The art of multiprocessor programming, Morgan Kaufmann, 2e éd. (ISBN 978-0-12-415950-1), p. 147