我想在C中使用原子变量。
我在gcc中尝试了以下建议的内置函数,但收到了链接错误undefined reference to `_sync_fetch_and_add'
。
type __sync_fetch_and_add (type *ptr, type value);
type __sync_fetch_and_sub (type *ptr, type value);
type __sync_fetch_and_or (type *ptr, type value);
type __sync_fetch_and_and (type *ptr, type value);
type __sync_fetch_and_xor (type *ptr, type value);
type __sync_fetch_and_nand (type *ptr, type value);
我假设我的架构不支持它们。我认为可能是因为它不是INTEL而是查看CPU信息我发现我有Intel CPU。
>less /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Xeon(R) CPU X5570 @ 2.93GHz
stepping : 5
cpu MHz : 1600.000
>uname -a
Linux xxxxxx 2.6.24.7-108.el5rt #1 SMP PREEMPT RT
Mon Mar 23 10:58:10 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
您是否知道可能为我的架构实现原子变量的其他方法或库,或者我是否做错了(可能是我要检查的一些编译标志)?
注意:我发现stdatomic.h
但不幸的是仅适用于C ++
用法示例:
int i =0;
i = _sync_fetch_and_add (&i,2);
答案 0 :(得分:4)
这个答案将在201X年变得相关。 : - )
即将推出的C1X标准是将atomics作为C语言特性引入。 请参阅draft C1X standard。
答案 1 :(得分:2)
尝试-march命令行选项,原子内置不可用于所有目标体系结构。 See also