我试图使用__atomic_load_n从gcc 原子内建网页,与编译
gcc -Wall -march=i686 -std=gnu99 ll.c -o ll
Run Code Online (Sandbox Code Playgroud)
但它告诉我它不能
警告:隐式声明函数'__atomic_load_n'
我认为这将是足以提供gcc与arch和march标志(并确保通过设置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