See the cxx0x support matrix . ARM Linux supports most functions in a standard way. It is possible that a particular machine may not support the function. That is, the gcc version, Linux version and glibc version and CPU type can come into play.
Check the definition of __VERSION__ to see if the compiler supports it. Very, very old versions of Linux cannot support this with some types of processors; ARMv5 and older. The new ARM processors have some bus locking instructions and can support this without any OS support.
echo | g++ -dM -E - | grep -i atomic
Must specify a list of definitions. If you compile -march=armv7 , you are more fortunate. However, with later versions of Linux (and the / glibc compiler targeting this version) even -march=armv5 will work on systems other than SMP. I do not think that the ARMv5 SMP system can exist.
As you can see, there are many working parts, and it is possible that some functions may be known only during operation. It is probably not possible to provide a list; you need gcc version, at least support matrix support for it to work.
For example, with the same compiler, but only -march=armv4 compared to -march=armv6 ,
ARMV4
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 1 #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 1 #define __GCC_ATOMIC_LONG_LOCK_FREE 1 #define __GCC_ATOMIC_POINTER_LOCK_FREE 1 #define __GCC_ATOMIC_INT_LOCK_FREE 1
ARMv6
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 #define __GCC_ATOMIC_INT_LOCK_FREE 2 #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 #define __GCC_ATOMIC_LONG_LOCK_FREE 2
Most modern smartphones have armv7 or better.
source share