在 gcc 3.4.3 中使用原子操作

Posted

技术标签:

【中文标题】在 gcc 3.4.3 中使用原子操作【英文标题】:Using atomic operations in gcc 3.4.3 【发布时间】:2011-10-16 12:04:11 【问题描述】:

built in atomic operations 是在 gcc-4.1.2 中引入的。但是,我在只有 gcc 3.4.3 的 OpenIndiana 上使用 gcc。现在我的问题是如何?此外,我曾尝试在 OpenIndiana 中使用 gcc 4.6.1,但它不起作用,因为它抱怨一些运行时库。如果有人成功使用过,请告诉我。

【问题讨论】:

【参考方案1】:

我建议你升级你的 GCC 编译器。 GCC 3 是一个古老的东西。

如果您无法安装较新版本的 GCC,您应该尝试从其源代码编译 GCC 4.6.1 编译器。 (不要忘记在源代码树之外的构建树中编译它,并且不要忘记所有依赖项)。

您没有提及或解释您的 GCC 4.6.1 编译失败的原因。它抱怨了哪些运行时库? ldconfig 安装后你运行了吗?

【讨论】:

【参考方案2】:

GCC 有很好的内联汇编支持,所以你可以使用__asm 来制作你自己的各种原子操作的变体。但是,它会特定于您的目标平台,因此您需要一些好的宏来切换到正确的版本。

【讨论】:

【参考方案3】:

要添加到现有答案 - 你看过 Spec Files Extra Repository 吗?我自己从未使用过它,但它似乎提供了 gcc 4.6 编译器包。

【讨论】:

【参考方案4】:

在 Solaris 上,替代方法可能是回退到 libc atomic_ops(3C) 接口。这些可能会或可能不会被内联,但无论您使用哪种编译器,它们都保证始终可用(并且始终以相同的方式运行)。

除此之外,我支持升级您的 gcc 和/或获取 SunStudio 12.2 compilers 的建议(它们是免版税的;即使您只将它用于测试,如果它是代码质量往往会提高可以与多个编译器一起使用...)。是的,它也可以在基于 OpenSolaris 的发行版上安装/运行。

【讨论】:

以上是关于在 gcc 3.4.3 中使用原子操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 上执行适用于 x86、arm、GCC 和 icc 的原子操作?

gcc原子操作测试

c++中的原子操作

Java 并发编程线程操作原子性问题 ( 问题业务场景分析 | 使用 synchronized 解决线程原子性问题 )

原子操作

原子操作的特性