Qu'est-ce que Compare-and-swap ?

Instruction atomique qui écrit une nouvelle valeur en mémoire uniquement si la valeur actuelle est égale à la valeur attendue. Aussi notée CAS. En boucle, en relisant et réessayant en cas d'échec, elle permet des mises à jour sans verrou.

Nom japonais: コンペア・アンド・スワップ

« Compare-and-swap » apparaît dans 2 questions d'entraînement réparties sur 1 thèmes, dont Multicœur et synchronisation.

Domaine: Multicœur et synchronisation

S'entraîner : questions sur Compare-and-swap

Quel est le fonctionnement de l’instruction atomique CAS (compare-and-swap) ?

  1. AElle n’écrit la nouvelle valeur que si la valeur en mémoire est égale à la valeur attendue, et indique si elle a réussi
  2. BElle compare deux valeurs en mémoire et écrit la plus grande dans les deux
  3. CElle échange sans condition la valeur en mémoire et la valeur du registre
Afficher la réponse et l'explication

Réponse : A. Elle n’écrit la nouvelle valeur que si la valeur en mémoire est égale à la valeur attendue, et indique si elle a réussi

CAS effectue de façon indivisible l’opération « si la valeur à cette adresse est toujours la valeur attendue, la remplacer par la nouvelle valeur ». Si un autre thread a modifié la valeur entre la lecture et l’écriture, l’opération échoue ; on peut donc mettre à jour en vérifiant que la valeur n’a pas changé. Avec une boucle qui, en cas d’échec, relit, recalcule et retente le CAS, on met à jour une valeur partagée en toute sécurité sans verrou. L’instruction cmpxchg de x86 en est un exemple.

« Compare-and-swap » dans les explications

Questions mentionnant « Compare-and-swap » (2)

  1. Quel est le fonctionnement de l’instruction atomique CAS (compare-and-swap) ?
  2. Quelle description d’une instruction atomique (instruction indivisible) est correcte ?

Termes associés

Instruction atomique Sans verrou (lock-free) LR/SC Acquisition-libération (acquire-release) Barrière mémoire Cohérence séquentielle Course aux données (data race) Espionnage de bus (snooping) Faux partage (false sharing) Interblocage (deadlock)

Retour au glossaire