質問

知っている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の上でサポートされています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top