0

说有:

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,如果它们相等,将分配desiredbyte并返回true,否则(即如果byte不等于expected),它将分配byteexpected并返回false

因此,如果它是对字节的 CAS 操作,其中比较不仅仅是通过检查 EQUALITY 来完成,而是通过一些按位操作,如按位与或按位或,那么就有可能对位进行 CAS。

所以问题变成了是否存在字节的 CAS 操作,在比较时,它不是寻找相等性,而是寻找一些按位运算,如按位与或按位或?

4

1 回答 1

3

[是否存在]字节的 CAS 操作,在比较时,它不是寻找相等性,而是寻找一些按位运算,如按位与或按位或?

在 C++ 中,唯一的比较和交换操作检查是否相等。所以答案是否定的。

此外,我不知道有一个 CPU 会以其他方式运行(尽管可能在微处理器 / DSP 类别中,但谁知道呢,有些可以做非常奇怪的、专门的事情)。

于 2013-08-01T15:35:29.043 回答