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。
感谢您的帮助!
答案 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;,但通常它们是。您可以使用int
为ATOMIC_INT_LOCK_FREE
测试此属性。
对于您的情况,您甚至不需要原子交换功能。在原子变量上
faultsBitMask |= 0x1;
将始终是原子读 - 修改 - 写操作。
答案 2 :(得分:0)
如果您使用的是GCC,请尝试GCC builtin __atomic_exchange
或__atomic_compare_exchange_n
。