如何在一个字节的两个相邻位上进行原子CAS操作?

时间:2013-08-01 15:29:11

标签: gcc c++11 atomic bitmask compare-and-swap

说有:

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 );

会将byteexpected进行原子比较,如果这些是{1},则会将desired分配给byte并返回true,否则(即byte 1}}不等于expected),它会将byte分配给expected并返回false

因此,如果它是一个用于字节的CAS操作,那里的比较不仅仅是通过检查EQUALITY,而是进行一些按位操作,如按位和/或按位 - 或者,那么就可以为位。

所以问题转变为是否存在用于字节的CAS操作,在比较时,它看起来不是等于,而是按位按位和/或按位 - 或者

进行某些按位操作

1 个答案:

答案 0 :(得分:3)

  

[有]一个用于字节的CAS操作,在比较时,它看起来不是相等,而是一些按位操作,如按位和/或按位 - 或?

在C ++中,唯一的Compare And Swap操作检查是否相等。所以答案是平坦的

此外,我不知道单个CPU的行为是否正常(尽管可能属于微处理器/ DSP类别,谁知道,有些人可以做非常奇怪的,专门的事情)。