C 中是否有任何函数可以进行原子读-修改-写?
我希望在单个原子块中读取一个值,然后将其设置为 0。
对于 C++,有 std::atomic::exchange() 这正是我正在寻找的。 C中是否有等价的东西?
这是代码:
void interruptHandler(void) {
/* Callback attached to 3rd party device driver, indicating hardware fault */
/* Set global variable bit masked flag to indicate interrupt */
faultsBitMask |= 0x1;
}
void auditPoll(*faults) {
*faults = faultsBitMask;
/* !!! Need to prevent interrupt pre-empt here !!! */
/* Combine these two lines to a single read-modify-write? */
faultsBitMask = 0;
}
目标架构是 PowerPC。
谢谢您的帮助!
最佳答案
是的,<stdatomic.h>
header 包含一个类型泛型函数 atomic_exchange
这与 C++ 版本非常相似:
_Atomic int n = 10;
#include <stdatomic.h>
int main(void) { return atomic_exchange(&n, 0); }
关于C原子读修改写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47486940/