在 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 的原子操作?