我试图将我从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/