C原子读取修改写入

时间:2017-11-25 14:14:42

标签: c atomic powerpc

C中是否有任何函数可以进行原子读 - 修改 - 写? 我想在一个原子块中读取一个值,然后设置为0。

对于C ++,有std :: atomic :: exchange(),这正是我正在寻找的。 C中是否有相同的东西?

以下是代码:

var list = (from r in ctx.Roles.Include(x => x.RolesResources.Select(z => z.Resources)) select r)
    .ToList()

目标架构是PowerPC。

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

是的,<stdatomic.h>标头包含类型泛型函数atomic_exchange,它与C ++版本非常相似:

_Atomic int n = 10;

#include <stdatomic.h>

int main(void) { return atomic_exchange(&n, 0); }

答案 1 :(得分:2)

您似乎希望将atomics与信号处理程序一起使用。 C11原子类型可以做到这一点,如果它们是&#34;无锁定&#34;,但通常它们是。您可以使用intATOMIC_INT_LOCK_FREE测试此属性。

对于您的情况,您甚至不需要原子交换功能。在原子变量上

faultsBitMask |= 0x1;

将始终是原子读 - 修改 - 写操作。

答案 2 :(得分:0)

如果您使用的是GCC,请尝试GCC builtin __atomic_exchange__atomic_compare_exchange_n