C原子读取修改写入

Spl*_*aty 2 c powerpc atomic

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.

谢谢您的帮助!

Ker*_* SB 5

是的,<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)