Frage

Ich weiß, dass auf MacOSX / Posix-Systemen gibt es im atomaren Vergleichs- und Auslagerungs für C / C ++ Code über g ++.

Aber ich brauche nicht die vergleichen - ich will nur atomar auf zwei Werte zu tauschen. Gibt es einen atomaren Swap-Betrieb zur Verfügung? [Everythign ich finden kann atomic_compare_and_swap ist ... und ich möchte nur die Swap tun, ohne vergleichen].

Danke!

War es hilfreich?

Lösung

die „lock xchg“ intel Montageanleitung erreicht wahrscheinlich das, was Sie wollen, aber ich denke nicht, daß es eine GCC Wrapper-Funktion ist es tragbar zu machen. Daher Ihre stecken mit Inline-Assembler (nicht tragbar) oder unter Verwendung von Vergleichs- und Auslagerungs und zwingt die Vergleichs true (inneficient) sein. Hoffe, das hilft: -)

Andere Tipps

hat GCC diese Operation bei einigen Prozessoren bieten, unter dem (zum Verwechseln genannt) __sync_lock_test_and_set. Von der GCC-Dokumentation:

 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.

Allerdings ist die vollständige Swap-Operation auf x86-32 und x86-64 unterstützt wird, effektiv die lock xchg Bereitstellung Wrapper Sie sonst zu schreiben brauchen würde.

Denken Sie nicht da ist. Hier ist die Referenz, btw:

scroll top