STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Macros | Typedefs | Functions
atomic File Reference
#include <yvals.h>
#include <type_traits>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <limits.h>
#include <xatomic.h>
#include <xxatomic>

Classes

struct  atomic< _Ty >
 
struct  atomic_flag
 
struct  _Atomic_impl< _Bytes >
 
struct  _Atomic_impl< 1U >
 
struct  _Atomic_impl< 2U >
 
struct  _Atomic_impl< 4U >
 
struct  _Atomic_impl< 8U >
 
struct  _Atomic_base< _Ty, _Bytes >
 
struct  atomic< _Ty >
 

Macros

#define _ATOMIC_
 
#define ATOMIC_CHAR_LOCK_FREE   _ATOMIC_CHAR_LOCK_FREE
 
#define ATOMIC_CHAR16_T_LOCK_FREE   _ATOMIC_CHAR16_T_LOCK_FREE
 
#define ATOMIC_CHAR32_T_LOCK_FREE   _ATOMIC_CHAR32_T_LOCK_FREE
 
#define ATOMIC_WCHAR_T_LOCK_FREE   _ATOMIC_WCHAR_T_LOCK_FREE
 
#define ATOMIC_SHORT_LOCK_FREE   _ATOMIC_SHORT_LOCK_FREE
 
#define ATOMIC_INT_LOCK_FREE   _ATOMIC_INT_LOCK_FREE
 
#define ATOMIC_LONG_LOCK_FREE   _ATOMIC_LONG_LOCK_FREE
 
#define ATOMIC_LLONG_LOCK_FREE   _ATOMIC_LLONG_LOCK_FREE
 
#define ATOMIC_FLAG_INIT   {0}
 
#define ATOMIC_VAR_INIT(_Val)   { _Val }
 
#define _ATOMIC_ITYPE   _Atomic_bool
 
#define _ITYPE   bool
 
#define _ISIZE   1
 
#define _ATOMIC_ITYPE   _Atomic_char
 
#define _ITYPE   char
 
#define _ISIZE   1
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_schar
 
#define _ITYPE   signed char
 
#define _ISIZE   1
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_uchar
 
#define _ITYPE   unsigned char
 
#define _ISIZE   1
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_char16_t
 
#define _ITYPE   char16_t
 
#define _ISIZE   2
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_char32_t
 
#define _ITYPE   char32_t
 
#define _ISIZE   4
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_wchar_t
 
#define _ITYPE   wchar_t
 
#define _ISIZE   _WCHAR_T_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_HAS_NO_SPECIALIZATION
 
#define _ATOMIC_ITYPE   _Atomic_short
 
#define _ITYPE   short
 
#define _ISIZE   _SHORT_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_ushort
 
#define _ITYPE   unsigned short
 
#define _ISIZE   _SHORT_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_int
 
#define _ITYPE   int
 
#define _ISIZE   _INT_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_uint
 
#define _ITYPE   unsigned int
 
#define _ISIZE   _INT_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_long
 
#define _ITYPE   long
 
#define _ISIZE   _LONG_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_ulong
 
#define _ITYPE   unsigned long
 
#define _ISIZE   _LONG_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_llong
 
#define _ITYPE   long long
 
#define _ISIZE   _LONGLONG_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_ullong
 
#define _ITYPE   unsigned long long
 
#define _ISIZE   _LONGLONG_SIZE
 
#define _ATOMIC_HAS_ARITHMETIC_OPS
 
#define _ATOMIC_ITYPE   _Atomic_address
 
#define _ITYPE   void *
 
#define _ISIZE   _ADDR_SIZE
 
#define _ATOMIC_IS_ADDRESS_TYPE
 
#define _ATOMIC_HAS_NO_SPECIALIZATION
 

Typedefs

typedef struct atomic_flag atomic_flag
 
typedef atomic< boolatomic_bool
 
typedef atomic< char > atomic_char
 
typedef atomic< signed char > atomic_schar
 
typedef atomic< unsigned char > atomic_uchar
 
typedef atomic< short > atomic_short
 
typedef atomic< unsigned short > atomic_ushort
 
typedef atomic< int > atomic_int
 
typedef atomic< unsigned int > atomic_uint
 
typedef atomic< long > atomic_long
 
typedef atomic< unsigned long > atomic_ulong
 
typedef atomic< long long > atomic_llong
 
typedef atomic< unsigned long long > atomic_ullong
 
typedef atomic< char16_t > atomic_char16_t
 
typedef atomic< char32_t > atomic_char32_t
 
typedef atomic< wchar_tatomic_wchar_t
 
typedef atomic< int8_tatomic_int8_t
 
typedef atomic< uint8_tatomic_uint8_t
 
typedef atomic< int16_tatomic_int16_t
 
typedef atomic< uint16_tatomic_uint16_t
 
typedef atomic< int32_tatomic_int32_t
 
typedef atomic< uint32_tatomic_uint32_t
 
typedef atomic< int64_tatomic_int64_t
 
typedef atomic< uint64_tatomic_uint64_t
 
typedef atomic< int_least8_tatomic_int_least8_t
 
typedef atomic< uint_least8_tatomic_uint_least8_t
 
typedef atomic< int_least16_tatomic_int_least16_t
 
typedef atomic< uint_least16_tatomic_uint_least16_t
 
typedef atomic< int_least32_tatomic_int_least32_t
 
typedef atomic< uint_least32_tatomic_uint_least32_t
 
typedef atomic< int_least64_tatomic_int_least64_t
 
typedef atomic< uint_least64_tatomic_uint_least64_t
 
typedef atomic< int_fast8_tatomic_int_fast8_t
 
typedef atomic< uint_fast8_tatomic_uint_fast8_t
 
typedef atomic< int_fast16_tatomic_int_fast16_t
 
typedef atomic< uint_fast16_tatomic_uint_fast16_t
 
typedef atomic< int_fast32_tatomic_int_fast32_t
 
typedef atomic< uint_fast32_tatomic_uint_fast32_t
 
typedef atomic< int_fast64_tatomic_int_fast64_t
 
typedef atomic< uint_fast64_tatomic_uint_fast64_t
 
typedef atomic< intptr_tatomic_intptr_t
 
typedef atomic< uintptr_tatomic_uintptr_t
 
typedef atomic< size_tatomic_size_t
 
typedef atomic< ptrdiff_tatomic_ptrdiff_t
 
typedef atomic< intmax_tatomic_intmax_t
 
typedef atomic< uintmax_tatomic_uintmax_t
 

Functions

_STD_BEGIN memory_order _Get_memory_order (memory_order _Order)
 
template<class _Ty >
_Ty kill_dependency (_Ty _Arg) _NOEXCEPT
 
template<class _Ty >
bool atomic_is_lock_free (const volatile atomic< _Ty > *) _NOEXCEPT
 
template<class _Ty >
bool atomic_is_lock_free (const atomic< _Ty > *) _NOEXCEPT
 
template<class _Ty >
void atomic_init (volatile atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
void atomic_init (atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
void atomic_store (volatile atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
void atomic_store (atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
void atomic_store_explicit (volatile atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
void atomic_store_explicit (atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_load (const volatile atomic< _Ty > *) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_load (const atomic< _Ty > *) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_load_explicit (const volatile atomic< _Ty > *, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_load_explicit (const atomic< _Ty > *, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_exchange (volatile atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_exchange (atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_exchange_explicit (volatile atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_exchange_explicit (atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
bool atomic_compare_exchange_weak (volatile atomic< _Ty > *, _Ty *, _Ty) _NOEXCEPT
 
template<class _Ty >
bool atomic_compare_exchange_weak (atomic< _Ty > *, _Ty *, _Ty) _NOEXCEPT
 
template<class _Ty >
bool atomic_compare_exchange_weak_explicit (volatile atomic< _Ty > *, _Ty *, _Ty, memory_order, memory_order) _NOEXCEPT
 
template<class _Ty >
bool atomic_compare_exchange_weak_explicit (atomic< _Ty > *, _Ty *, _Ty, memory_order, memory_order) _NOEXCEPT
 
template<class _Ty >
bool atomic_compare_exchange_strong (volatile atomic< _Ty > *, _Ty *, _Ty) _NOEXCEPT
 
template<class _Ty >
bool atomic_compare_exchange_strong (atomic< _Ty > *, _Ty *, _Ty) _NOEXCEPT
 
template<class _Ty >
bool atomic_compare_exchange_strong_explicit (volatile atomic< _Ty > *, _Ty *, _Ty, memory_order, memory_order) _NOEXCEPT
 
template<class _Ty >
bool atomic_compare_exchange_strong_explicit (atomic< _Ty > *, _Ty *, _Ty, memory_order, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_add (volatile atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_add (atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_add_explicit (volatile atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_add_explicit (atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_sub (volatile atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_sub (atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_sub_explicit (volatile atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_sub_explicit (atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_and (volatile atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_and (atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_and_explicit (volatile atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_and_explicit (atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_or (volatile atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_or (atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_or_explicit (volatile atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_or_explicit (atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_xor (volatile atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_xor (atomic< _Ty > *, _Ty) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_xor_explicit (volatile atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
template<class _Ty >
_Ty atomic_fetch_xor_explicit (atomic< _Ty > *, _Ty, memory_order) _NOEXCEPT
 
bool atomic_flag_test_and_set (volatile atomic_flag *_Flag) _NOEXCEPT
 
bool atomic_flag_test_and_set (atomic_flag *_Flag) _NOEXCEPT
 
bool atomic_flag_test_and_set_explicit (volatile atomic_flag *_Flag, memory_order _Order) _NOEXCEPT
 
bool atomic_flag_test_and_set_explicit (atomic_flag *_Flag, memory_order _Order) _NOEXCEPT
 
void atomic_flag_clear (volatile atomic_flag *_Flag) _NOEXCEPT
 
void atomic_flag_clear (atomic_flag *_Flag) _NOEXCEPT
 
void atomic_flag_clear_explicit (volatile atomic_flag *_Flag, memory_order _Order) _NOEXCEPT
 
void atomic_flag_clear_explicit (atomic_flag *_Flag, memory_order _Order) _NOEXCEPT
 
template<class _Ty >
_Ty * atomic_fetch_add (volatile atomic< _Ty * > *_Atom, ptrdiff_t _Value) _NOEXCEPT
 
template<class _Ty >
_Ty * atomic_fetch_add (atomic< _Ty * > *_Atom, ptrdiff_t _Value) _NOEXCEPT
 
template<class _Ty >
_Ty * atomic_fetch_add_explicit (volatile atomic< _Ty * > *_Atom, ptrdiff_t _Value, memory_order _Order) _NOEXCEPT
 
template<class _Ty >
_Ty * atomic_fetch_add_explicit (atomic< _Ty * > *_Atom, ptrdiff_t _Value, memory_order _Order) _NOEXCEPT
 
template<class _Ty >
_Ty * atomic_fetch_sub (volatile atomic< _Ty * > *_Atom, ptrdiff_t _Value) _NOEXCEPT
 
template<class _Ty >
_Ty * atomic_fetch_sub (atomic< _Ty * > *_Atom, ptrdiff_t _Value) _NOEXCEPT
 
template<class _Ty >
_Ty * atomic_fetch_sub_explicit (volatile atomic< _Ty * > *_Atom, ptrdiff_t _Value, memory_order _Order) _NOEXCEPT
 
template<class _Ty >
_Ty * atomic_fetch_sub_explicit (atomic< _Ty * > *_Atom, ptrdiff_t _Value, memory_order _Order) _NOEXCEPT
 
void atomic_thread_fence (memory_order _Order) _NOEXCEPT
 
void atomic_signal_fence (memory_order _Order) _NOEXCEPT
 

Macro Definition Documentation

#define _ATOMIC_
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_ARITHMETIC_OPS
#define _ATOMIC_HAS_NO_SPECIALIZATION
#define _ATOMIC_HAS_NO_SPECIALIZATION
#define _ATOMIC_IS_ADDRESS_TYPE
#define _ATOMIC_ITYPE   _Atomic_bool
#define _ATOMIC_ITYPE   _Atomic_char
#define _ATOMIC_ITYPE   _Atomic_schar
#define _ATOMIC_ITYPE   _Atomic_uchar
#define _ATOMIC_ITYPE   _Atomic_char16_t
#define _ATOMIC_ITYPE   _Atomic_char32_t
#define _ATOMIC_ITYPE   _Atomic_wchar_t
#define _ATOMIC_ITYPE   _Atomic_short
#define _ATOMIC_ITYPE   _Atomic_ushort
#define _ATOMIC_ITYPE   _Atomic_int
#define _ATOMIC_ITYPE   _Atomic_uint
#define _ATOMIC_ITYPE   _Atomic_long
#define _ATOMIC_ITYPE   _Atomic_ulong
#define _ATOMIC_ITYPE   _Atomic_llong
#define _ATOMIC_ITYPE   _Atomic_ullong
#define _ATOMIC_ITYPE   _Atomic_address
#define _ISIZE   1
#define _ISIZE   1
#define _ISIZE   1
#define _ISIZE   1
#define _ISIZE   2
#define _ISIZE   4
#define _ISIZE   _WCHAR_T_SIZE
#define _ISIZE   _SHORT_SIZE
#define _ISIZE   _SHORT_SIZE
#define _ISIZE   _INT_SIZE
#define _ISIZE   _INT_SIZE
#define _ISIZE   _LONG_SIZE
#define _ISIZE   _LONG_SIZE
#define _ISIZE   _LONGLONG_SIZE
#define _ISIZE   _LONGLONG_SIZE
#define _ISIZE   _ADDR_SIZE
#define _ITYPE   bool
#define _ITYPE   char
#define _ITYPE   signed char
#define _ITYPE   unsigned char
#define _ITYPE   char16_t
#define _ITYPE   char32_t
#define _ITYPE   wchar_t
#define _ITYPE   short
#define _ITYPE   unsigned short
#define _ITYPE   int
#define _ITYPE   unsigned int
#define _ITYPE   long
#define _ITYPE   unsigned long
#define _ITYPE   long long
#define _ITYPE   unsigned long long
#define _ITYPE   void *
#define ATOMIC_CHAR16_T_LOCK_FREE   _ATOMIC_CHAR16_T_LOCK_FREE
#define ATOMIC_CHAR32_T_LOCK_FREE   _ATOMIC_CHAR32_T_LOCK_FREE
#define ATOMIC_CHAR_LOCK_FREE   _ATOMIC_CHAR_LOCK_FREE
#define ATOMIC_FLAG_INIT   {0}
#define ATOMIC_INT_LOCK_FREE   _ATOMIC_INT_LOCK_FREE
#define ATOMIC_LLONG_LOCK_FREE   _ATOMIC_LLONG_LOCK_FREE
#define ATOMIC_LONG_LOCK_FREE   _ATOMIC_LONG_LOCK_FREE
#define ATOMIC_SHORT_LOCK_FREE   _ATOMIC_SHORT_LOCK_FREE
#define ATOMIC_VAR_INIT (   _Val)    { _Val }
#define ATOMIC_WCHAR_T_LOCK_FREE   _ATOMIC_WCHAR_T_LOCK_FREE

Typedef Documentation

typedef atomic<char> atomic_char
typedef atomic<char16_t> atomic_char16_t
typedef atomic<char32_t> atomic_char32_t
typedef struct atomic_flag atomic_flag
typedef atomic<int> atomic_int
typedef atomic<long long> atomic_llong
typedef atomic<long> atomic_long
typedef atomic<signed char> atomic_schar
typedef atomic<short> atomic_short
typedef atomic<unsigned char> atomic_uchar
typedef atomic<unsigned int> atomic_uint
typedef atomic<unsigned long long> atomic_ullong
typedef atomic<unsigned long> atomic_ulong
typedef atomic<unsigned short> atomic_ushort

Function Documentation

_STD_BEGIN memory_order _Get_memory_order ( memory_order  _Order)
inline
40  { // get second memory_order argument for cas functions
41  // that take only one memory_order argument
42  return (_Order == memory_order_acq_rel ? memory_order_acquire
44  : _Order);
45  }
Definition: xatomic0.h:20
Definition: xatomic0.h:16
Definition: xatomic0.h:19
Definition: xatomic0.h:18
template<class _Ty >
bool atomic_compare_exchange_strong ( volatile atomic< _Ty > *  _Atom,
_Ty *  _Exp,
_Ty  _Value 
)
inline
945  {
946  return (_Atom->compare_exchange_strong(*_Exp, _Value));
947  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
bool atomic_compare_exchange_strong ( atomic< _Ty > *  _Atom,
_Ty *  _Exp,
_Ty  _Value 
)
inline
952  {
953  return (_Atom->compare_exchange_strong(*_Exp, _Value));
954  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
bool compare_exchange_strong(_Ty &_Exp, _Ty _Value, memory_order _Order1, memory_order _Order2) volatile _NOEXCEPT
Definition: atomic:622
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
bool atomic_compare_exchange_strong_explicit ( volatile atomic< _Ty > *  _Atom,
_Ty *  _Exp,
_Ty  _Value,
memory_order  _Order1,
memory_order  _Order2 
)
inline
960  {
961  return (_Atom->compare_exchange_strong(*_Exp, _Value, _Order1, _Order2));
962  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
bool atomic_compare_exchange_strong_explicit ( atomic< _Ty > *  _Atom,
_Ty *  _Exp,
_Ty  _Value,
memory_order  _Order1,
memory_order  _Order2 
)
inline
968  {
969  return (_Atom->compare_exchange_strong(*_Exp, _Value, _Order1, _Order2));
970  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
bool compare_exchange_strong(_Ty &_Exp, _Ty _Value, memory_order _Order1, memory_order _Order2) volatile _NOEXCEPT
Definition: atomic:622
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
bool atomic_compare_exchange_weak ( volatile atomic< _Ty > *  _Atom,
_Ty *  _Exp,
_Ty  _Value 
)
inline
915  {
916  return (_Atom->compare_exchange_weak(*_Exp, _Value));
917  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
bool atomic_compare_exchange_weak ( atomic< _Ty > *  _Atom,
_Ty *  _Exp,
_Ty  _Value 
)
inline
922  {
923  return (_Atom->compare_exchange_weak(*_Exp, _Value));
924  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
bool compare_exchange_weak(_Ty &_Exp, _Ty _Value, memory_order _Order1, memory_order _Order2) volatile _NOEXCEPT
Definition: atomic:592
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
bool atomic_compare_exchange_weak_explicit ( volatile atomic< _Ty > *  _Atom,
_Ty *  _Exp,
_Ty  _Value,
memory_order  _Order1,
memory_order  _Order2 
)
inline
930  {
931  return (_Atom->compare_exchange_weak(*_Exp, _Value, _Order1, _Order2));
932  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
bool atomic_compare_exchange_weak_explicit ( atomic< _Ty > *  _Atom,
_Ty *  _Exp,
_Ty  _Value,
memory_order  _Order1,
memory_order  _Order2 
)
inline
938  {
939  return (_Atom->compare_exchange_weak(*_Exp, _Value, _Order1, _Order2));
940  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
bool compare_exchange_weak(_Ty &_Exp, _Ty _Value, memory_order _Order1, memory_order _Order2) volatile _NOEXCEPT
Definition: atomic:592
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_exchange ( volatile atomic< _Ty > *  _Atom,
_Ty  _Value 
)
inline
887  {
888  return (_Atom->exchange(_Value));
889  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_exchange ( atomic< _Ty > *  _Atom,
_Ty  _Value 
)
inline
894  {
895  return (_Atom->exchange(_Value));
896  }
_Ty exchange(_Ty _Value, memory_order _Order=memory_order_seq_cst) volatile _NOEXCEPT
Definition: atomic:578
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_exchange_explicit ( volatile atomic< _Ty > *  _Atom,
_Ty  _Value,
memory_order  _Order 
)
inline
901  {
902  return (_Atom->exchange(_Value, _Order));
903  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_exchange_explicit ( atomic< _Ty > *  _Atom,
_Ty  _Value,
memory_order  _Order 
)
inline
908  {
909  return (_Atom->exchange(_Value, _Order));
910  }
_Ty exchange(_Ty _Value, memory_order _Order=memory_order_seq_cst) volatile _NOEXCEPT
Definition: atomic:578
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_fetch_add ( volatile atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty atomic_fetch_add ( atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty* atomic_fetch_add ( volatile atomic< _Ty * > *  _Atom,
ptrdiff_t  _Value 
)
inline
976  {
977  return (_Atom->fetch_add(_Value));
978  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty* atomic_fetch_add ( atomic< _Ty * > *  _Atom,
ptrdiff_t  _Value 
)
inline
983  {
984  return (_Atom->fetch_add(_Value));
985  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_fetch_add_explicit ( volatile atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty atomic_fetch_add_explicit ( atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty* atomic_fetch_add_explicit ( volatile atomic< _Ty * > *  _Atom,
ptrdiff_t  _Value,
memory_order  _Order 
)
inline
991  {
992  return (_Atom->fetch_add(_Value, _Order));
993  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty* atomic_fetch_add_explicit ( atomic< _Ty * > *  _Atom,
ptrdiff_t  _Value,
memory_order  _Order 
)
inline
999  {
1000  return (_Atom->fetch_add(_Value, _Order));
1001  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_fetch_and ( volatile atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty atomic_fetch_and ( atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty atomic_fetch_and_explicit ( volatile atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty atomic_fetch_and_explicit ( atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty atomic_fetch_or ( volatile atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty atomic_fetch_or ( atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty atomic_fetch_or_explicit ( volatile atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty atomic_fetch_or_explicit ( atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty atomic_fetch_sub ( volatile atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty atomic_fetch_sub ( atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty* atomic_fetch_sub ( volatile atomic< _Ty * > *  _Atom,
ptrdiff_t  _Value 
)
inline
1006  {
1007  return (_Atom->fetch_sub(_Value));
1008  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty* atomic_fetch_sub ( atomic< _Ty * > *  _Atom,
ptrdiff_t  _Value 
)
inline
1013  {
1014  return (_Atom->fetch_sub(_Value));
1015  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_fetch_sub_explicit ( volatile atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty atomic_fetch_sub_explicit ( atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty* atomic_fetch_sub_explicit ( volatile atomic< _Ty * > *  _Atom,
ptrdiff_t  _Value,
memory_order  _Order 
)
inline
1021  {
1022  return (_Atom->fetch_sub(_Value, _Order));
1023  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty* atomic_fetch_sub_explicit ( atomic< _Ty * > *  _Atom,
ptrdiff_t  _Value,
memory_order  _Order 
)
inline
1029  {
1030  return (_Atom->fetch_sub(_Value, _Order));
1031  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
_Ty atomic_fetch_xor ( volatile atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty atomic_fetch_xor ( atomic< _Ty > *  ,
_Ty   
)
template<class _Ty >
_Ty atomic_fetch_xor_explicit ( volatile atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
template<class _Ty >
_Ty atomic_fetch_xor_explicit ( atomic< _Ty > *  ,
_Ty  ,
memory_order   
)
void atomic_flag_clear ( volatile atomic_flag _Flag)
inline
240  { // atomically clear *_Flag
241  _ATOMIC_FLAG_CLEAR(&_Flag->_My_flag, memory_order_seq_cst);
242  }
#define _ATOMIC_FLAG_CLEAR
Definition: xatomic.h:167
Definition: xatomic0.h:21
void atomic_flag_clear ( atomic_flag _Flag)
inline
245  { // atomically clear *_Flag
247  }
#define _ATOMIC_FLAG_CLEAR
Definition: xatomic.h:167
Definition: xatomic0.h:21
_Atomic_flag_t _My_flag
Definition: atomic:187
void atomic_flag_clear_explicit ( volatile atomic_flag _Flag,
memory_order  _Order 
)
inline
251  { // atomically clear *_Flag
252  _ATOMIC_FLAG_CLEAR(&_Flag->_My_flag, _Order);
253  }
#define _ATOMIC_FLAG_CLEAR
Definition: xatomic.h:167
void atomic_flag_clear_explicit ( atomic_flag _Flag,
memory_order  _Order 
)
inline
257  { // atomically clear *_Flag
258  _ATOMIC_FLAG_CLEAR(&_Flag->_My_flag, _Order);
259  }
#define _ATOMIC_FLAG_CLEAR
Definition: xatomic.h:167
_Atomic_flag_t _My_flag
Definition: atomic:187
bool atomic_flag_test_and_set ( volatile atomic_flag _Flag)
inline
218  { // atomically set *_Flag to true and return previous value
219  return (_ATOMIC_FLAG_TEST_AND_SET(&_Flag->_My_flag, memory_order_seq_cst));
220  }
#define _ATOMIC_FLAG_TEST_AND_SET
Definition: xatomic.h:166
Definition: xatomic0.h:21
bool atomic_flag_test_and_set ( atomic_flag _Flag)
inline
223  { // atomically set *_Flag to true and return previous value
225  }
#define _ATOMIC_FLAG_TEST_AND_SET
Definition: xatomic.h:166
Definition: xatomic0.h:21
_Atomic_flag_t _My_flag
Definition: atomic:187
bool atomic_flag_test_and_set_explicit ( volatile atomic_flag _Flag,
memory_order  _Order 
)
inline
229  { // atomically set *_Flag to true and return previous value
230  return (_ATOMIC_FLAG_TEST_AND_SET(&_Flag->_My_flag, _Order));
231  }
#define _ATOMIC_FLAG_TEST_AND_SET
Definition: xatomic.h:166
bool atomic_flag_test_and_set_explicit ( atomic_flag _Flag,
memory_order  _Order 
)
inline
235  { // atomically set *_Flag to true and return previous value
236  return (_ATOMIC_FLAG_TEST_AND_SET(&_Flag->_My_flag, _Order));
237  }
#define _ATOMIC_FLAG_TEST_AND_SET
Definition: xatomic.h:166
_Atomic_flag_t _My_flag
Definition: atomic:187
template<class _Ty >
void atomic_init ( volatile atomic< _Ty > *  _Atom,
_Ty  _Value 
)
inline
815  {
816  *_Atom = _Value;
817  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
void atomic_init ( atomic< _Ty > *  _Atom,
_Ty  _Value 
)
inline
822  {
823  *_Atom = _Value;
824  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
bool atomic_is_lock_free ( const volatile atomic< _Ty > *  _Atom)
inline
801  {
802  return (_Atom->is_lock_free());
803  }
template<class _Ty >
bool atomic_is_lock_free ( const atomic< _Ty > *  _Atom)
inline
808  {
809  return (_Atom->is_lock_free());
810  }
bool is_lock_free() const volatile _NOEXCEPT
Definition: atomic:530
template<class _Ty >
_Ty atomic_load ( const volatile atomic< _Ty > *  _Atom)
inline
858  {
859  return (_Atom->load());
860  }
template<class _Ty >
_Ty atomic_load ( const atomic< _Ty > *  _Atom)
inline
864  {
865  return (_Atom->load());
866  }
_Ty load(memory_order _Order=memory_order_seq_cst) const volatile _NOEXCEPT
Definition: atomic:552
template<class _Ty >
_Ty atomic_load_explicit ( const volatile atomic< _Ty > *  _Atom,
memory_order  _Order 
)
inline
872  {
873  return (_Atom->load(_Order));
874  }
template<class _Ty >
_Ty atomic_load_explicit ( const atomic< _Ty > *  _Atom,
memory_order  _Order 
)
inline
880  {
881  return (_Atom->load(_Order));
882  }
_Ty load(memory_order _Order=memory_order_seq_cst) const volatile _NOEXCEPT
Definition: atomic:552
void atomic_signal_fence ( memory_order  _Order)
inline
1040  { // force memory visibility and inhibit compiler reordering
1041  return (_ATOMIC_SIGNAL_FENCE(_Order));
1042  }
#define _ATOMIC_SIGNAL_FENCE
Definition: xatomic.h:170
template<class _Ty >
void atomic_store ( volatile atomic< _Ty > *  _Atom,
_Ty  _Value 
)
inline
829  {
830  _Atom->store(_Value);
831  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
void atomic_store ( atomic< _Ty > *  _Atom,
_Ty  _Value 
)
inline
836  {
837  _Atom->store(_Value);
838  }
_In_ int _Value
Definition: setjmp.h:173
void store(_Ty _Value, memory_order _Order=memory_order_seq_cst) volatile _NOEXCEPT
Definition: atomic:540
template<class _Ty >
void atomic_store_explicit ( volatile atomic< _Ty > *  _Atom,
_Ty  _Value,
memory_order  _Order 
)
inline
844  {
845  _Atom->store(_Value, _Order);
846  }
_In_ int _Value
Definition: setjmp.h:173
template<class _Ty >
void atomic_store_explicit ( atomic< _Ty > *  _Atom,
_Ty  _Value,
memory_order  _Order 
)
inline
852  {
853  _Atom->store(_Value, _Order);
854  }
_In_ int _Value
Definition: setjmp.h:173
void store(_Ty _Value, memory_order _Order=memory_order_seq_cst) volatile _NOEXCEPT
Definition: atomic:540
void atomic_thread_fence ( memory_order  _Order)
inline
1035  { // force memory visibility and inhibit compiler reordering
1036  return (_ATOMIC_THREAD_FENCE(_Order));
1037  }
#define _ATOMIC_THREAD_FENCE
Definition: xatomic.h:169
template<class _Ty >
_Ty kill_dependency ( _Ty  _Arg)
50  { // magic template that kills dependency ordering when called
51  return (_Arg);
52  }