Multicœur et synchronisation

Quelle description du problème ABA, qui affecte les structures de données sans verrou utilisant CAS, est correcte ?

  1. ALes deux threads A et B ne peuvent plus s’exécuter qu’en alternance
  2. BLorsque la valeur passe de A à B puis revient à A, CAS ne remarque pas le changement et réussit
  3. CLes deux verrous A et B sont pris dans l’ordre inverse
Afficher la réponse et l'explication

Réponse : B. Lorsque la valeur passe de A à B puis revient à A, CAS ne remarque pas le changement et réussit

Si le pointeur de tête d’une liste chaînée vaut A, il peut arriver que, pendant qu’un thread lit A et prépare son CAS, un autre thread retire A, effectue une opération sur B, puis réinsère un nœud à la même adresse A. Le CAS réussit puisque la valeur est toujours A, mais le contenu de la liste a déjà changé et la structure est corrompue. On l’évite en associant au pointeur un compteur de mises à jour comparé en même temps, ou en utilisant LR/SC.

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

Autres questions sur Multicœur et synchronisation

  1. Quel est le fonctionnement d’une instruction fetch-and-add, comme amoadd.w de RISC-V ou lock xadd de x86 ?
  2. Quelle description du verrou à attente active (spinlock) est correcte ?
  3. Dans quelle situation le spinlock est-il le moins adapté ?
  4. 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 ?
  5. Quelle comparaison entre mutex (verrou à attente en sommeil) et spinlock est correcte ?

Comparatifs sur ce thème