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;
}
Run Code Online (Sandbox Code Playgroud)
目标架构是PowerPC.
谢谢您的帮助!
是的,<stdatomic.h>标头包含一个类型泛型函数atomic_exchange,它与C++版本非常相似:
_Atomic int n = 10;
#include <stdatomic.h>
int main(void) { return atomic_exchange(&n, 0); }
Run Code Online (Sandbox Code Playgroud)