小编Bru*_*ong的帖子

以原子方式将一个或多个位复制到整数中

我有一些代码,通过首先清除目标 int 中的掩码位,然后将它们或运算到 int 中,将掩码位复制到整数中。

像这样:

bitsToSet = 6
targetInt &= ~(1 << bitsToSet)
targetInt |= desiredBitValue << bitsToSet
Run Code Online (Sandbox Code Playgroud)

问题是它现在需要是线程安全的,并且我需要使操作原子化。我认为使用 std:atomic<int> 只会使每个子操作成为原子操作,而不是整个操作。

如何使整个操作(包括 &= 和 |= 操作)原子化?

例如,如果我有一个函数(或者更好的是宏),SetBits(TARGET, MASK, VALUE)它可以自动将 TARGET 中的 MASKed 位设置为 VALUE,那么它就会为我解决问题。MASK 和 VALUE 已经可以左移。

我当前的非原子代码是

#define SetBits(TARGET, MASK, VALUE) {(TARGET) &= ~((uint64_t)MASK); (TARGET)|=((uint64_t)VALUE);}
Run Code Online (Sandbox Code Playgroud)

c++ bit-manipulation atomic bit

3
推荐指数
1
解决办法
384
查看次数

标签 统计

atomic ×1

bit ×1

bit-manipulation ×1

c++ ×1