C 中的原子变量

发布于 2024-10-25 10:30:12 字数 1128 浏览 1 评论 0原文

我想在 C 中使用原子变量。

我在 gcc 中尝试了以下建议的内置函数,但收到了链接错误 对 `_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);

I would like to use atomic variables in C.

I tried the following suggested builtin functions in gcc but I received a link error 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);

I am assuming that my architecture doesn't support them..I thought that probably because it is not INTEL but looking a the CPU info I discovered that I have 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

Do you know other ways or libraries that might implement atomic variables for my architecture or if am I doing something wrong( maybe some compilation flags that I hould check out )?

NOTE: I found stdatomic.h but is for C++ only unfortunately

Usage example:

int i =0;
i = _sync_fetch_and_add (&i,2);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

菩提树下叶撕阳。 2024-11-01 10:30:12

这个答案将在 201X 年变得有意义。 :-)

即将推出的 C1X 标准将引入原子作为 C 语言功能。
请参阅C1X 标准草案

This answer is going to become relevant in the year 201X. :-)

The upcoming C1X standard is to introduce atomics as a C language feature.
See the draft C1X standard.

浪漫人生路 2024-11-01 10:30:12

尝试使用 -march 命令行选项,原子内置函数并非适用于所有目标体系结构。 另请参阅

Try the -march command line option, the atomic builtins are not available for all target architectures. See also

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文