Multicœur et synchronisation

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 ?

  1. AParce que la lecture ordinaire est plus exacte que l’instruction atomique
  2. BParce qu’une instruction atomique ne peut être utilisée qu’une fois par programme
  3. CParce qu’une simple lecture peut attendre dans son propre cache, ce qui réduit fortement les allers-retours de la ligne de cache entre les cœurs
Afficher la réponse et l'explication

Réponse : C. Parce qu’une simple lecture peut attendre dans son propre cache, ce qui réduit fortement les allers-retours de la ligne de cache entre les cœurs

Une instruction atomique implique une écriture ; si les threads en attente l’exécutent de façon répétée, ils se disputent à chaque fois la ligne en état M et invalident sans cesse les copies des autres cœurs. Avec des lectures ordinaires, chaque cœur se contente de lire sa copie en état S dans son propre cache, sans aucun échange. Ce n’est que lorsque le verrou est libéré et que la valeur change que l’instruction atomique est utilisée pour le prendre.

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

Autres questions sur Multicœur et synchronisation

  1. Quelle comparaison entre mutex (verrou à attente en sommeil) et spinlock est correcte ?
  2. Quel est un exemple d’interblocage (deadlock) ?
  3. Dans un programme utilisant plusieurs verrous, quelle est la méthode la plus courante pour éviter l’interblocage ?
  4. Que définit un modèle de cohérence mémoire (memory consistency model) ?
  5. Quelle description de la cohérence séquentielle (sequential consistency) est correcte ?

Comparatifs sur ce thème