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 |