Evo C++ Library v0.5.1
Classes | Namespaces | Macros | Typedefs | Functions
atomic.h File Reference

Evo atomic types. More...

#include "impl/sys.h"
#include "type.h"
#include <atomic>

Go to the source code of this file.

Classes

class  Atomic< T >
 Atomic integer type. More...
 
struct  AtomicFlag
 Atomic signalling flag. More...
 
class  AtomicPtr< T >
 Atomic dumb pointer to single object. More...
 
class  AtomicPtr< T[]>
 Atomic dumb pointer to array. More...
 

Namespaces

 evo
 Evo C++ Library namespace.
 

Macros

#define EVO_ATOMIC_ACQ_REL   std::memory_order_acq_rel
 Combined "acquire" & "release" level memory barrier. More...
 
#define EVO_ATOMIC_ACQUIRE   std::memory_order_acquire
 Start "acquire" memory ordering barrier, usually followed by a matching "release" barrier. More...
 
#define EVO_ATOMIC_CONSUME   std::memory_order_consume
 Start "consume" memory ordering barrier, usually followed by a matching "release" barrier. More...
 
#define EVO_ATOMIC_FENCE(MEM_ORDER)   std::atomic_thread_fence(MEM_ORDER)
 Sets a memory fence/barrier. More...
 
#define EVO_ATOMIC_PTRMATH   1
 
#define EVO_ATOMIC_RELAXED   std::memory_order_relaxed
 Relaxed memory ordering, used between start/end memory barriers. More...
 
#define EVO_ATOMIC_RELEASE   std::memory_order_release
 Release (end) memory ordering barrier started with "consume" or "acquire" barrier. More...
 
#define EVO_ATOMIC_SAFE_STATICS   1
 
#define EVO_ATOMIC_SYNC   std::memory_order_seq_cst
 Full sync (sequentially consistent) memory barrier. More...
 
#define EVO_INTRINSIC_ATOMICS   1
 
#define EVO_STD_ATOMIC   1
 
#define INCL_evo_atomic_h
 

Typedefs

typedef Atomic< int > AtomicInt
 Atomic signed int. More...
 
typedef Atomic< int32 > AtomicInt32
 Atomic 32-bit signed int. More...
 
typedef Atomic< int64 > AtomicInt64
 Atomic 64-bit signed int. More...
 
typedef Atomic< long > AtomicLong
 Atomic signed long. More...
 
typedef Atomic< longl > AtomicLongL
 Atomic signed long long. More...
 
typedef Atomic< uint > AtomicUInt
 Atomic unsigned int. More...
 
typedef Atomic< uint32 > AtomicUInt32
 Atomic 32-bit unsigned int. More...
 
typedef Atomic< uint64 > AtomicUInt64
 Atomic 64-bit unsigned int. More...
 
typedef Atomic< ulong > AtomicULong
 Atomic unsigned long. More...
 
typedef Atomic< ulongl > AtomicULongL
 Atomic unsigned long long. More...
 
typedef std::memory_order MemOrder
 Atomic memory order (fence) type. More...
 

Functions

template<class T >
bool operator!= (const PtrBase< T > &ptr1, const PtrBase< T, Atomic< T *> > &ptr2)
 Inequality operator for managed pointer base and atomic pointer base. More...
 
template<class T >
bool operator< (const PtrBase< T > &ptr1, const PtrBase< T, Atomic< T *> > &ptr2)
 Less-than operator for managed pointer base and atomic pointer base. More...
 
template<class T >
bool operator<= (const PtrBase< T > &ptr1, const PtrBase< T, Atomic< T *> > &ptr2)
 Less-than-or-equals operator for managed pointer base and atomic pointer base. More...
 
template<class T >
bool operator== (const PtrBase< T > &ptr1, const PtrBase< T, Atomic< T *> > &ptr2)
 Equality operator for managed pointer base and atomic pointer base. More...
 
template<class T >
bool operator> (const PtrBase< T > &ptr1, const PtrBase< T, Atomic< T *> > &ptr2)
 Greater-than operator for managed pointer base and atomic pointer base. More...
 
template<class T >
bool operator>= (const PtrBase< T > &ptr1, const PtrBase< T, Atomic< T *> > &ptr2)
 Greater-than-or-equals operator for managed pointer base and atomic pointer base. More...
 

Detailed Description

Evo atomic types.

Macro Definition Documentation

◆ EVO_ATOMIC_ACQ_REL

#define EVO_ATOMIC_ACQ_REL   std::memory_order_acq_rel

Combined "acquire" & "release" level memory barrier.

See MemOrder

◆ EVO_ATOMIC_ACQUIRE

#define EVO_ATOMIC_ACQUIRE   std::memory_order_acquire

Start "acquire" memory ordering barrier, usually followed by a matching "release" barrier.

See MemOrder

◆ EVO_ATOMIC_CONSUME

#define EVO_ATOMIC_CONSUME   std::memory_order_consume

Start "consume" memory ordering barrier, usually followed by a matching "release" barrier.

See MemOrder

◆ EVO_ATOMIC_FENCE

#define EVO_ATOMIC_FENCE (   MEM_ORDER)    std::atomic_thread_fence(MEM_ORDER)

Sets a memory fence/barrier.

  • Memory ordering (fence) levels – see: std::memory_order and C++11 memory model:
    • EVO_ATOMIC_RELAXED: Relaxed memory ordering, used between start/end memory barriers – std::memory_order_relaxed
    • EVO_ATOMIC_CONSUME: Start "consume" memory ordering barrier, usually followed by a matching "release" barrier – std::memory_order_consume
    • EVO_ATOMIC_ACQUIRE: Start "acquire" memory ordering barrier, usually followed by a matching "release" barrier – std::memory_order_acquire
    • EVO_ATOMIC_RELEASE: Release (end) memory ordering barrier started with "consume" or "acquire" barrier – std::memory_order_release
    • EVO_ATOMIC_ACQ_REL: Combined acquire/release fence – std::memory_order_acq_rel
    • EVO_ATOMIC_SYNC: Full sync (sequentially consistent) memory barrier – std::memory_order_seq_cst
  • Caution: Exact behavior is CPU dependent, and compiler dependent before C++11 – if in doubt it's safest to use a Mutex
  • See also: MemOrder
Parameters
MEM_ORDERMemory ordering (fence) level

◆ EVO_ATOMIC_PTRMATH

#define EVO_ATOMIC_PTRMATH   1

◆ EVO_ATOMIC_RELAXED

#define EVO_ATOMIC_RELAXED   std::memory_order_relaxed

Relaxed memory ordering, used between start/end memory barriers.

See MemOrder

◆ EVO_ATOMIC_RELEASE

#define EVO_ATOMIC_RELEASE   std::memory_order_release

Release (end) memory ordering barrier started with "consume" or "acquire" barrier.

See MemOrder

◆ EVO_ATOMIC_SAFE_STATICS

#define EVO_ATOMIC_SAFE_STATICS   1

◆ EVO_ATOMIC_SYNC

#define EVO_ATOMIC_SYNC   std::memory_order_seq_cst

Full sync (sequentially consistent) memory barrier.

See MemOrder

◆ EVO_INTRINSIC_ATOMICS

#define EVO_INTRINSIC_ATOMICS   1

◆ EVO_STD_ATOMIC

#define EVO_STD_ATOMIC   1

◆ INCL_evo_atomic_h

#define INCL_evo_atomic_h