0

あるとしましょう:

unsigned char byte = someValue;

私が必要としているbyteのは、4 番目と 5 番目の 2 つの隣接するビットに対してアトミック CAS (比較と交換) 操作を実行することです。

確かに、バイトより短いものをアドレス指定する方法はありませんが、バイト用の CAS 関数があるため、次のようになります。

unsigned char expected = expectedValue;
unsigned char desired  =  desiredValue;
// atomic CAS operation for byte
__atomic_compare_exchange_n( &byte, &expected, desired, 0, std::memory_order_seq_cst, std::memory_order_seq_cst );

はアトミックに と比較byteexpected、それらが EQUAL の場合はに割り当てdesiredbyte返します。truebyteexpectedbyteexpectedfalse

したがって、比較が EQUALITY をチェックするだけでなく、bitwise-and または bitwise-or などのビットごとの演算を実行することによって比較が行われるバイトの CAS 演算である場合、ビットに対して CAS を実行することが可能になります。

したがって、問題は、比較時に同等性を探すのではなく、bitwise-and または bitwise-or?

4

1 に答える 1

3

[ある]バイトのCAS操作は、比較時に同等性を探すのではなく、bitwise-andまたはbitwise-orのようなビットごとの操作を探しますか?

C++ では、Compare And Swap 操作のみが等しいかどうかをチェックします。したがって、答えは一律ノーです。

さらに、それ以外の動作をする単一の CPU を私は知りません (ただし、マイクロプロセッサ / DSP のカテゴリにはあるかもしれませんが、本当に奇妙で特殊なことができるものもあります)。

于 2013-08-01T15:35:29.043 に答える