Evo atomic types.
More...
#include "impl/sys.h"
#include "type.h"
#include <atomic>
Go to the source code of this file.
|
| evo |
| Evo C++ Library namespace.
|
|
|
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...
|
|
◆ 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_ORDER | Memory 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
◆ INCL_evo_atomic_h
#define INCL_evo_atomic_h |