Il me semble que sur un systeme multi processeurs x86 ( hors Itanium ), l'usage de "volatile" ne garantit pas que l'operation ++i soit atomique.
L'opération ++i est decomposé en fait en trois operations par le cpu
mov eax,dword ptr [ i ] // lecture dans un registre de la variable i
inc eax // Incrementation de ce registre
mov dword ptr [i] , eax // ecriture de la variable
Si deux trheads exexutent en même temps cette operation, le reultat est i==1 pour les deux threads....
[^] # Re: Multicoeur ?
Posté par pdesarnaud . En réponse à la dépêche Intel libère TBB. Évalué à 3.
L'opération ++i est decomposé en fait en trois operations par le cpu
mov eax,dword ptr [ i ] // lecture dans un registre de la variable i
inc eax // Incrementation de ce registre
mov dword ptr [i] , eax // ecriture de la variable
Si deux trheads exexutent en même temps cette operation, le reultat est i==1 pour les deux threads....