Folco (./4) :
C'est quoi cette histoire d'opérations atomiques ?
Alors déjà, ça n'a rien à voir avec le nucléaire.

Mais sérieusement: Une opération atomique est une opération qui ne peut être interrompue par rien, en particulier, pas par un autre thread. Par exemple, si tu as une incrémentation atomique, tu peux être sûr qu'un autre thread ne va pas accéder à ta variable pendant l'incrémentation, mais seulement soit avant, soit après, alors que si tu as le classique "lecture, incrémentation dans un registre, écriture" (et même si tu as une instruction d'incrémentation qui opère "directement" sur la mémoire, un processeur moderne fait les 3 étapes en interne) sans garantie d'atomicité, le thread peut changer la valeur entre ta lecture et ton écriture et tu écrases ce que l'autre thread a écrit, ce qui pour un compteur veut dire que tu as perdu une incrémentation (celle faite par l'autre thread).
En graphique, si les threads 1 et 2 font une incrémentation non-atomique, tu peux avoir:
sans perte de généralité, au départ: x=0
thread 1 lit x → x=0, x1=0
thread 1 incrémente x1 → x=0, x1=1
thread 1 interrompu! (Ou encore, les 2 threads s'exécutent en même temps sur 2 cores différents, ce qui fait que tu peux avoir l'équivalent d'une interruption même là où tu ne l'attends pas du tout, genre au milieu d'une instruction.)
thread 2 lit x → x=0, x1=1, x2=0
thread 2 incrémente x2 → x=0, x1=1, x2=1
thread 2 écrit x → x=1, x1=1, x2=1
retour au thread 1
thread 1 écrit x → x=1, x1=1, x2=1
… oups! On a voulu incrémenter x 2 fois, mais la valeur n'a augmenté que de 1.