C原子读修改写

标签 c atomic powerpc

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/

相关文章:

iphone - OpenGL ES - glImageProcessing - 移除纹理

c - flock(),然后是 fgets() : low-level locks,,然后是 stdio 读/写库函数。是否可以?

c - 如何为实时流媒体编码视频文件并通过 UDP 数据报传送

c++ - 为什么 weak_ptr 没有 atomic_{store,load}?

c - 32 位有符号整数除法在 PowerPC 上给出 0x7fffffff 作为商

assembly - PowerPC 上有屏蔽混合指令吗?

ios - 如何在我的 Objective-C iOS 项目中使用 C 库?

multithreading - 原子操作有多昂贵?

java - volatile 为什么以及如何暗示原子读/写?

xcode - 测试 mac 通用二进制文件