• [^] # Re: Multicoeur ?

    Posté par . En réponse à la dépêche Intel libère TBB. Évalué à 3.

    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.