MacOSX / PosiXシステムでは、g++を介したC/C++コードのアトミックコンペアアンドスワップがあることを私は知っています。
ただし、比較は必要ありません。2つの値をアトミックに交換したいだけです。アトミックスワップ操作は利用できますか?[私が見つけることができるすべてのものはatomic_compare_and_swapです...そして私は比較せずにスワップをしたいだけです]。
ありがとう!
MacOSX / PosiXシステムでは、g++を介したC/C++コードのアトミックコンペアアンドスワップがあることを私は知っています。
ただし、比較は必要ありません。2つの値をアトミックに交換したいだけです。アトミックスワップ操作は利用できますか?[私が見つけることができるすべてのものはatomic_compare_and_swapです...そして私は比較せずにスワップをしたいだけです]。
ありがとう!
「lockxchg」Intelアセンブリ命令は、おそらくあなたが望むものを達成しますが、それを移植可能にするためのGCCラッパー関数があるとは思いません。そのため、インラインアセンブリ(ポータブルではない)を使用するか、コンペアアンドスワップを使用して比較をtrue(非効率的)にすることでスタックします。お役に立てれば :-)
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.
ただし、完全なスワップ操作はx86-32およびx86-64でサポートされており、他のlock xchg
方法で作成する必要のあるラッパーを効果的に提供します。
あるとは思わないでください。ちなみに、リファレンスは次のとおりです。http: //developer.apple.com/Mac/library/documentation/DriversKernelHardware/Reference/libkern_ref/OSAtomic_h/index.html#//apple_ref/doc/header/user_space_OSAtomic.h