【发布时间】:2011-03-22 15:15:10
【问题描述】:
我想在 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);
我假设我的架构不支持它们。我想这可能是因为它不是英特尔,而是查看 CPU 信息,我发现我有英特尔 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);
【问题讨论】:
-
您能展示一下您是如何使用这些功能的吗?看起来您在函数名称
__sync_XXX中缺少两个下划线。 -
嗯,我觉得有点愚蠢,因为现在它编译没有问题。你是对的..我错过了第一个下划线..:(
-
没问题,每个人都可以偶尔用第二双眼睛:)
标签: c multithreading atomic