在gcc中使用原子操作3.4.3

时间:2011-10-16 12:04:11

标签: c gcc opensolaris solaris-10

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

4 个答案:

答案 0 :(得分:2)

我建议你升级你的GCC编译器。海湾合作委员会 3 是一件古老的事情。

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

您没有提及或解释为什么您的GCC 4.6.1编译失败。它抱怨什么运行时库?安装后是否运行了 ldconfig

答案 1 :(得分:1)

GCC具有出色的内联汇编支持,因此您可以使用__asm来创建各种原子操作的变体。它会特定于您的目标平台,因此您需要一些好的宏来切换到正确的版本。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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