使用gcc原子内置?

Der*_*unk 7 c gcc gnu atomic

我试图使用__atomic_load_ngcc 原子内建网页,与编译

gcc -Wall -march=i686 -std=gnu99 ll.c -o ll
Run Code Online (Sandbox Code Playgroud)

但它告诉我它不能

警告:隐式声明函数'__atomic_load_n'

我认为这将是足以提供gccarchmarch标志(并确保通过设置std=gnu99标志),但无济于事.事实上,即使我测试普通__GCC_VERSION____GNUC__宏似乎没有价值......但我有一个漂亮的vanilla gcc安装,Ubuntu中的安装.

我知道我做的事情很傻,但我无法弄清楚是什么.我有gcc(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3

代码看起来像这样:它是一个永远不会被调用的函数,所以问题出在编译时.

type* func(type* p) {
    type* q = __atomic_load_n (p, __ATOMIC_SEQ_CST);
}
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 17

直到GCC 4.6.3,原子操作的编译器内置__sync_*函数是纯编译器扩展,在GCC中,它们被分组到函数族中.

从版本4.7.0开始,新的C++ 11和C11标准都已完成,GCC更新了它们的原子内置函数,以更好地反映这两种新语言修订版的新内存模型.新功能分为__atomic_*家庭.

但是,较旧的内置函数仍然可用,文档说明了这一点:

使用内存模型使用呼叫替换呼叫始终是安全的.__sync__atomic__ATOMIC_SEQ_CST