【发布时间】:2017-11-25 14:14:41
【问题描述】:
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。
感谢您的帮助!
【问题讨论】:
-
C11 标准添加了atomic operations。如果你的编译器足够新,你可以使用它们。
-
C11 原子类型和操作已与 C++11 规范同步指定。它们应该在 C 和 C++ 之间是二进制兼容的。
-
感谢@Someprogrammerdude 和@JensGustedt!