Atomic Operations in C on Linux

atomic, c, gcc, linux

Solution

Well, nothing is there to stop you from using `OSAtomic` operations on other platforms. The sources for `OSAtomic` operations for ARM, x86 and PPC are a part of Apple's libc which is opensource. Just make sure you are not using `OSSpinLock` as that is specific to Mac OS X, but this can be easily replaced by Linux futexes.

See these:

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

Alternatively, you can use the `sync_*` family, which I believe should work on most platforms, which I believe are described here: http://gcc.gnu.org/wiki/Atomic

Problem

I am trying to port some code I wrote from Mac OS X to Linux and am struggling to find a suitable replacement for the OSX only `OSAtomic.h`. I found the gcc `__sync*` family, but I am not sure it will be compatible with the older compiler/kernel I have. I need the code to run on GCC v4.1.2 and kernel 2.6.18. The particular operations I need are: - Increment - Decrement - Compare and Swap What is weird is that running `locate stdatomic.h` on the linux machine finds the header file (in a c++ directory), whereas running the same command on my OSX machine (gcc v4.6.3) returns nothing. What do I have to install to get the stdatomic library, and will it work with gcc v 4.1.2? As a side note, I can't use any third party libraries.

Original source

Related problems