Multicœur et synchronisation

Avec une paire d’instructions comme LR/SC (load-reserved/store-conditional) de RISC-V, dans quel cas le SC (store-conditional) échoue-t-il ?

  1. ALorsque la valeur écrite par SC est identique à la valeur lue par LR
  2. BLorsque la réservation a été perdue entre le LR et le SC, par exemple parce qu’un autre cœur a écrit à cette adresse
  3. CLorsqu’au moins une autre instruction a été exécutée entre LR et SC
Afficher la réponse et l'explication

Réponse : B. Lorsque la réservation a été perdue entre le LR et le SC, par exemple parce qu’un autre cœur a écrit à cette adresse

LR lit la valeur et « réserve » simultanément l’adresse. Lors de l’écriture par SC, si la réservation est maintenue, l’écriture a lieu et réussit ; si elle a été perdue, par exemple à cause d’une écriture d’un autre cœur, SC n’écrit pas et renvoie un échec. Alors que CAS vérifie la concordance des valeurs, LR/SC vérifie s’il y a eu une écriture ; il détecte donc aussi le cas où la valeur a changé puis est revenue à l’original. ARM possède une paire d’instructions similaire.

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

Autres questions sur Multicœur et synchronisation

  1. Quelle description du problème ABA, qui affecte les structures de données sans verrou utilisant CAS, est correcte ?
  2. Quel est le fonctionnement d’une instruction fetch-and-add, comme amoadd.w de RISC-V ou lock xadd de x86 ?
  3. Quelle description du verrou à attente active (spinlock) est correcte ?
  4. Dans quelle situation le spinlock est-il le moins adapté ?
  5. 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 ?

Comparatifs sur ce thème