我想在 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 信息我发现我有英特尔 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);

最佳答案

这个答案将在 201X 年变得重要。 :-)

即将到来的 C1X 标准是将原子作为 C 语言特性引入。
请参阅 draft C1X standard

关于c - C中的原子变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5393409/

10-14 02:42