あるとしましょう:
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 );
はアトミックに と比較byte
しexpected
、それらが EQUAL の場合はに割り当てdesired
てbyte
返します。true
byte
expected
byte
expected
false
したがって、比較が EQUALITY をチェックするだけでなく、bitwise-and または bitwise-or などのビットごとの演算を実行することによって比較が行われるバイトの CAS 演算である場合、ビットに対して CAS を実行することが可能になります。
したがって、問題は、比較時に同等性を探すのではなく、bitwise-and または bitwise-or?