AtomicSwapの代わりにAtomicCompareAndSwap?
-
19-09-2019 - |
質問
知っているMacOSXを使用している場合/PosiXシステムが原子を比較し、スワップのためのC/C++のコードvia g++.
しかし、私はいらないの比較--ていただきたいと思い原子的にスワップ二つの値です。ある原子のスワップ操作できますか?[Everythignいのではatomic_compare_and_swap...やろうと思っているスワップ、と].
よろしく!
解決
「XCHGをロック」インテルのアセンブリ命令は、おそらくあなたが望むものを達成するが、私はそれをポータブルにするGCCのラッパー関数があると思ういけません。そのため、あなたの(ポータブルではない)インラインアセンブリを使用するか、コンペア・アンド・スワップ使用して、真(inneficient)と比較する強制的に立ち往生。この情報がお役に立てば幸い: - )
他のヒント
GCCは(紛らわしい名前の)__sync_lock_test_and_set
の下で、一部のプロセッサ上でこの操作を提供します。 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.
しかし、完全なスワップ操作を効果的にあなたがそうでなければ書く必要があるだろうlock xchg
ラッパーを提供し、x86-32およびx86-64の上でサポートされています。
所属していません StackOverflow