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 ?
- AElle se contente de lire la valeur en mémoire ; l’addition se fait dans un registre
- BElle additionne les valeurs de deux adresses mémoire et écrit le résultat à une troisième
- 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.
Continuer : 9 autres questions sur Multicœur et synchronisation