gpt4 book ai didi

c - UNIX 可移植原子操作

转载 作者:太空狗 更新时间:2023-10-29 16:22:49 24 4
gpt4 key购买 nike

在 C 中是否有一种(POSIX-)可移植的方式来进行原子变量操作,类似于使用 pthread 的可移植线程?

原子操作是像“增量和获取”这样以原子方式执行的操作,这意味着没有上下文切换可以干扰操作。在 Linux 内核空间中,我们必须 atomic_t类型,在 Java 中我们有 java.util.concurrent.atomic包。

在 Linux 上,atomic.h 文件提供原子操作,但包含依赖于平台,例如#include <asm-x86_64/atomic.h>并且它在 Mac OS X 上以类似的方式不可用。

最佳答案

从 C11 开始,有一个可选的 Atomic library它提供原子操作。这可以移植到任何具有 C11 编译器(如 gcc-4.9)和此可选功能的平台。

原子的存在可以用 __STDC_NO_ATOMICS__ 检查和 <stdatomic.h> 的存在

atomic.c

#include <stdio.h>
#include <stdlib.h>
#ifndef __STDC_NO_ATOMICS__
#include <stdatomic.h>
#endif

int main(int argc, char**argv) {
_Atomic int a;
atomic_init(&a, 42);
atomic_store(&a, 5);
int b = atomic_load(&a);
printf("b = %i\n", b);

return EXIT_SUCCESS;
}

编译器调用

clang -std=c11 atomic.c
gcc -std=c11 atomic.c

关于c - UNIX 可移植原子操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1130018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com