Qu'est-ce que Problème ABA ?

Problème où une valeur passe de A à B puis revient à A, si bien qu'un CAS qui ne compare que la valeur réussit sans voir le changement. À surveiller dans les structures de données sans verrou.

Nom japonais: ABA問題

« Problème ABA » 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 Problème ABA

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.

« Problème ABA » dans les explications

Questions mentionnant « Problème ABA » (2)

  1. Quelle description du problème ABA, qui affecte les structures de données sans verrou utilisant CAS, est correcte ?
  2. Quelle propriété caractérise un algorithme sans verrou (lock-free) ?

Termes associés

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

Retour au glossaire