1

MacOSX / PosiXシステムでは、g++を介したC/C++コードのアトミックコンペアアンドスワップがあることを私は知っています。

ただし、比較は必要ありません。2つの値をアトミックに交換したいだけです。アトミックスワップ操作は利用できますか?[私が見つけることができるすべてのものはatomic_compare_and_swapです...そして私は比較せずにスワップをしたいだけです]。

ありがとう!

4

3 に答える 3

3

「lockxchg」Intelアセンブリ命令は、おそらくあなたが望むものを達成しますが、それを移植可能にするためのGCCラッパー関数があるとは思いません。そのため、インラインアセンブリ(ポータブルではない)を使用するか、コンペアアンドスワップを使用して比較をtrue(非効率的)にすることでスタックします。お役に立てれば :-)

于 2010-03-12T23:42:36.337 に答える
1

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方法で作成する必要のあるラッパーを効果的に提供します。

于 2012-10-09T14:55:10.427 に答える
0

あるとは思わないでください。ちなみに、リファレンスは次のとおりです。http: //developer.apple.com/Mac/library/documentation/DriversKernelHardware/Reference/libkern_ref/OSAtomic_h/index.html#//apple_ref/doc/header/user_space_OSAtomic.h

于 2010-03-12T23:40:52.013 に答える