dme*_*ter 30 c concurrency posix atomic
在C中是否有(POSIX-)可移植方式用于原子变量操作,类似于使用pthread的可移植线程?
原子操作是像"递增和获取"这样的操作,它们以原子方式执行,这意味着没有上下文切换可以干扰操作.在Linux内核空间中,我们必须使用atomic_t类型,在Java中我们有java.util.concurrent.atomic包.
在Linux上,atomic.h文件提供原子操作,但include依赖于平台,例如#include <asm-x86_64/atomic.h>,它在Mac OS X上不能以类似的方式提供.
ece*_*ulm 13
从C11开始,有一个可选的Atomic库,它提供原子操作.对于具有此可选功能的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;
}
Run Code Online (Sandbox Code Playgroud)
编译器调用
clang -std=c11 atomic.c
gcc -std=c11 atomic.c
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32145 次 |
| 最近记录: |