Question

Je sais que sur les systèmes MacOSX / Posix, il est atomique comparer et-échange pour le code C / C ++ via g ++.

Cependant, je ne pas besoin de comparer - Je veux juste échanger atomiquement deux valeurs. Y at-il une opération d'échange atomique disponible? [Everythign je peux trouver est atomic_compare_and_swap ... et je veux juste faire l'échange, sans comparer].

Merci!

Était-ce utile?

La solution

l'instruction de montage intel « lock xchg » atteint probablement ce que vous voulez, mais je ne pense pas qu'il existe une fonction wrapper de GCC pour le rendre portable. Votre coincé à cet effet à l'aide assembleur en ligne (non portable) ou à l'aide de comparer et d'échanger et de forcer le comparer à être vrai (inneficient). Espérons que cela aide: -)

Autres conseils

GCC fournit cette opération sur certains processeurs, sous le (nom de prêter à confusion) __sync_lock_test_and_set. De la documentation GCC:

 This builtin, as described by Intel, is not a traditional
 test-and-set operation, but rather an atomic exchange operation.
 It writes VALUE into `*PTR', and returns the previous contents of
 `*PTR'.

 Many targets have only minimal support for such locks, and do not
 support a full exchange operation.  In this case, a target may
 support reduced functionality here by which the _only_ valid value
 to store is the immediate constant 1.  The exact value actually
 stored in `*PTR' is implementation defined.

Cependant, l'opération d'échange complet est pris en charge sur x86-32 et x86-64, fournissant efficacement l'emballage de lock xchg vous auriez besoin autrement écrire.

Ne pensez pas qu'il y ait. Voici la référence, BTW:

scroll top