Il me semble que l'incrément a.store(a.load(relaxed) + 1, release) n'est pas valide même avec le release mais je ne suis pas totalement certain. Il me semble que tu peux avoir des problèmes d'ordonnancements logiques comme :
thread A lit 10
thread B lit 10
thread A écrit 11
thread B écrit 11
Finalement, tu te retrouverais avec un seul incrément et non deux comme attendus.
Il me semble que dans ce genre de cas, la bonne pratique est d'utiliser une instruction CAS compare and swap comme fetch_add
# Bug possible sur l'incrément de l'index
Posté par Bonsoirin . En réponse au journal Barrières mémoire et buffers circulaires - Un résultat inattendu. Évalué à 1 (+1/-0). Dernière modification le 12 novembre 2025 à 10:43.
Il me semble que l'incrément
a.store(a.load(relaxed) + 1, release)n'est pas valide même avec lereleasemais je ne suis pas totalement certain. Il me semble que tu peux avoir des problèmes d'ordonnancements logiques comme :thread A lit 10
thread B lit 10
thread A écrit 11
thread B écrit 11
Finalement, tu te retrouverais avec un seul incrément et non deux comme attendus.
Il me semble que dans ce genre de cas, la bonne pratique est d'utiliser une instruction CAS compare and swap comme
fetch_add