AtomicSwap statt AtomicCompareAndSwap?
-
19-09-2019 - |
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!
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.