Atomic operations library

< c

If the macro constant __STDC_NO_ATOMICS__(C11) is defined by the compiler, the header <stdatomic.h>, the keyword _Atomic, and all of the names listed here are not provided.


Defined in header <stdatomic.h>
defines memory ordering constraints
lock-free atomic boolean flag


Defined in header <stdatomic.h>
indicates that the given atomic type is lock-free
(macro constant)
initializes a new atomic_flag
(macro constant)
(C11)(deprecated in C17)
initializes a new atomic object
(function macro)
breaks a dependency chain for memory_order_consume
(function macro)


Defined in header <stdatomic.h>
sets an atomic_flag to true and returns the old value
sets an atomic_flag to false
initializes an existing atomic object
indicates whether the atomic object is lock-free
stores a value in an atomic object
reads a value from an atomic object
swaps a value with the value of an atomic object
swaps a value with the an atomic object if the old value is what is expected, otherwise reads the old value
atomic addition
atomic subtraction
atomic bitwise OR
atomic bitwise exclusive OR
atomic bitwise AND
generic memory order-dependent fence synchronization primitive
fence between a thread and a signal handler executed in the same thread


The standard library offers convenience typedefs for the core language atomic types.

Typedef name Full type name
atomic_bool _Atomic _Bool
atomic_char _Atomic char
atomic_schar _Atomic signed char
atomic_uchar _Atomic unsigned char
atomic_short _Atomic short
atomic_ushort _Atomic unsigned short
atomic_int _Atomic int
atomic_uint _Atomic unsigned int
atomic_long _Atomic long
atomic_ulong _Atomic unsigned long
atomic_llong _Atomic long long
atomic_ullong _Atomic unsigned long long
atomic_char16_t _Atomic char16_t
atomic_char32_t _Atomic char32_t
atomic_wchar_t _Atomic wchar_t
atomic_int_least8_t _Atomic int_least8_t
atomic_uint_least8_t _Atomic uint_least8_t
atomic_int_least16_t _Atomic int_least16_t
atomic_uint_least16_t _Atomic uint_least16_t
atomic_int_least32_t _Atomic int_least32_t
atomic_uint_least32_t _Atomic uint_least32_t
atomic_int_least64_t _Atomic int_least64_t
atomic_uint_least64_t _Atomic uint_least64_t
atomic_int_fast8_t _Atomic int_fast8_t
atomic_uint_fast8_t _Atomic uint_fast8_t
atomic_int_fast16_t _Atomic int_fast16_t
atomic_uint_fast16_t _Atomic uint_fast16_t
atomic_int_fast32_t _Atomic int_fast32_t
atomic_uint_fast32_t _Atomic uint_fast32_t
atomic_int_fast64_t _Atomic int_fast64_t
atomic_uint_fast64_t _Atomic uint_fast64_t
atomic_intptr_t _Atomic intptr_t
atomic_uintptr_t _Atomic uintptr_t
atomic_size_t _Atomic size_t
atomic_ptrdiff_t _Atomic ptrdiff_t
atomic_intmax_t _Atomic intmax_t
atomic_uintmax_t _Atomic uintmax_t


  • C11 standard (ISO/IEC 9899:2011):
  • 7.17 Atomics <stdatomic.h> (p: 273-286)
  • 7.31.8 Atomics <stdatomic.h> (p: 455-456)

See also