• [^] # Re: Recouvrement

    Posté par . En réponse à la dépêche IBM lance la mémoire transactionnelle dans le matériel. Évalué à 3.

    Ton code a un problème : tu suppose que *val va être lu depuis la mémoire. En pratique c'est très souvent faux, car le compilateur a tendance à générer un code de ce genre :

    # On suppose que debit est stocké dans r3
    ld r4, @val # val est une adresse absolue en mémoire, r4 est choisi arbitrairement
    sub r4, r4, r3 # r4 -= r3
    st @val, r4

    C'est approximatif, mais l'idée est là. Entre le moment où le chargement de val dans r4 et le moment où l'on écrit par dessus val, plein de choses peuvent s'être passées — entre autres, un autre thread essaye de faire exactement la même chose.