n--; /* s'effectue atomiquement, sans risque de cafouillage car c'est un volatile int (on suppose un mécanisme de cohérence de cache) */
faux.
n-- (meme --n) dépend du compilateur.
et comme c'est un volatile int il peut etre réecris.
exemple n est a l'adresse 0x12345
T1 :
mv 0x12345 R1
ADD 1 R1
T2
mv 0x12345 R1
T1 :
mv R1 0x12345 ; le volatile demande de remettre en mémoire si un autre thread le demande. Evite qu'une donnée reste en cache/registre par exemple lors d'un context switch
T2 :
ADD 1 R1
mv R1 0x12345 ; le volatile demande de remettre en mémoire si un autre thread le demande.
on aura au final n-1 et pas n-2.
Et donc ton truc ne se terminera jamais.
Je t'invite a faire le test sur un quadri proc, et tu verras que --n ou ++n n'est pas forcément atomique.
[^] # Re: Multicoeur ?
Posté par briaeros007 . En réponse à la dépêche Intel libère TBB. Évalué à 3.
faux.
n-- (meme --n) dépend du compilateur.
et comme c'est un volatile int il peut etre réecris.
exemple n est a l'adresse 0x12345
T1 :
mv 0x12345 R1
ADD 1 R1
T2
mv 0x12345 R1
T1 :
mv R1 0x12345 ; le volatile demande de remettre en mémoire si un autre thread le demande. Evite qu'une donnée reste en cache/registre par exemple lors d'un context switch
T2 :
ADD 1 R1
mv R1 0x12345 ; le volatile demande de remettre en mémoire si un autre thread le demande.
on aura au final n-1 et pas n-2.
Et donc ton truc ne se terminera jamais.
Je t'invite a faire le test sur un quadri proc, et tu verras que --n ou ++n n'est pas forcément atomique.