C中的原子变量

时间:2011-03-22 15:15:10

标签: c multithreading atomic

我想在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);

2 个答案:

答案 0 :(得分:4)

这个答案将在201X年变得相关。 : - )

即将推出的C1X标准是将atomics作为C语言特性引入。 请参阅draft C1X standard

答案 1 :(得分:2)

尝试-march命令行选项,原子内置不可用于所有目标体系结构。 See also