Multicœur et synchronisation

Dans quelle situation le spinlock est-il le moins adapté ?

  1. ALorsque le verrou est détenu longtemps et que les threads en attente gaspillent du CPU
  2. BLorsque le verrou n’est détenu que quelques dizaines de nanosecondes
  3. CDans un traitement du noyau de l’OS qui ne peut pas s’endormir
Afficher la réponse et l'explication

Réponse : A. Lorsque le verrou est détenu longtemps et que les threads en attente gaspillent du CPU

Un thread qui attend un spinlock continue d’utiliser le CPU jusqu’à la libération. Si le verrou est détenu longtemps, tout ce temps CPU est gaspillé et gêne l’exécution des autres threads. En particulier, avec un seul cœur, le verrou ne se libère que si le thread détenteur s’exécute ; l’attente dure donc jusqu’à la fin du quantum de temps. Pour les attentes longues, on utilise un mutex qui attend en dormant ; il existe aussi des méthodes qui tournent brièvement avant de s’endormir.

S'entraîner sur ce thème Retour au thème

Autres questions sur Multicœur et synchronisation

  1. Dans un spinlock, pourquoi attendre la libération par des lectures ordinaires et n’utiliser l’instruction atomique que lorsque le verrou semble libre (test-and-test-and-set), plutôt que de tenter directement la modification par instruction atomique ?
  2. Quelle comparaison entre mutex (verrou à attente en sommeil) et spinlock est correcte ?
  3. Quel est un exemple d’interblocage (deadlock) ?
  4. Dans un programme utilisant plusieurs verrous, quelle est la méthode la plus courante pour éviter l’interblocage ?
  5. Que définit un modèle de cohérence mémoire (memory consistency model) ?

Comparatifs sur ce thème