Multicœur et synchronisation

Quel est le fonctionnement d’une instruction fetch-and-add, comme amoadd.w de RISC-V ou lock xadd de x86 ?

  1. AElle se contente de lire la valeur en mémoire ; l’addition se fait dans un registre
  2. BElle additionne les valeurs de deux adresses mémoire et écrit le résultat à une troisième
  3. CElle ajoute de façon indivisible un nombre donné à la valeur en mémoire et renvoie la valeur d’avant l’addition
Afficher la réponse et l'explication

Réponse : C. Elle ajoute de façon indivisible un nombre donné à la valeur en mémoire et renvoie la valeur d’avant l’addition

Fetch-and-add effectue lecture, addition et écriture en une seule opération indivisible ; une seule instruction résout donc la course aux données de counter++. Comme elle renvoie la valeur d’avant l’addition, elle sert aussi à distribuer des numéros dans l’ordre (attribuer à chaque thread des numéros sans recouvrement, par exemple). Sans échec ni nouvelle tentative, contrairement à une boucle CAS, elle est avantageuse lorsque de nombreux threads mettent à jour simultanément.

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

Autres questions sur Multicœur et synchronisation

  1. Quelle description du verrou à attente active (spinlock) est correcte ?
  2. Dans quelle situation le spinlock est-il le moins adapté ?
  3. 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 ?
  4. Quelle comparaison entre mutex (verrou à attente en sommeil) et spinlock est correcte ?
  5. Quel est un exemple d’interblocage (deadlock) ?

Comparatifs sur ce thème