【发布时间】:2013-08-02 15:03:55
【问题描述】:
说有:
unsigned char byte = someValue;
我需要的是对byte 中的一些两个相邻位执行原子 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,如果它们相等,则将desired 分配给byte 并返回true,否则(即如果byte 不等于expected),它会将byte 分配给expected 并返回false。
因此,如果它是对字节的 CAS 操作,其中比较不仅仅是通过检查 EQUALITY 来完成,而是通过一些按位操作,如按位与或按位或,那么就有可能对 CAS 进行位。
所以问题变成了是否存在字节的 CAS 操作,它在比较时不寻找相等性,而是寻找一些按位运算,如按位与或按位或?
【问题讨论】:
标签: gcc c++11 atomic bitmask compare-and-swap