我试图将我从Mac OS X编写的一些代码移植到Linux,并努力寻找适合OSX的唯一替代品OSAtomic.h。我找到了gcc __sync*系列,但是我不确定它是否与我拥有的较旧的编译器/内核兼容。我需要在GCC v4.1.2和内核2.6.18上运行的代码。

我需要的特定操作是:

  • 递增
  • 减少
  • 比较并交换

  • 奇怪的是,在linux机器上运行locate stdatomic.h会找到头文件(在c++目录中),而在我的OSX机器(gcc v4.6.3)上运行相同的命令则什么也不会返回。我必须安装什么才能获得stdatomic库,它是否可以与gcc v 4.1.2一起使用?

    附带说明,我不能使用任何第三方库。

    最佳答案

    好吧,没有什么可以阻止您在其他平台上使用OSAtomic操作。 ARM,x86和PPC的OSAtomic操作的源代码是Apple libc的一部分,后者是开源的。只要确保您没有使用OSSpinLock即可,因为它不是Mac OS X特有的,但是可以很容易地被Linux futex取代。

    看到这些:

    http://opensource.apple.com/source/Libc/Libc-594.1.4/i386/sys/OSAtomic.s
    http://opensource.apple.com/source/Libc/Libc-594.1.4/ppc/sys/OSAtomic.s
    http://opensource.apple.com/source/Libc/Libc-594.1.4/arm/sys/OSAtomic.s

    另外,您也可以使用sync_*系列,我相信它可以在大多数平台上运行,我相信在这里对此进行了描述:http://gcc.gnu.org/wiki/Atomic

    关于c - Linux上C语言中的原子操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12083694/

    10-13 08:05