|
MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
MSTL原子操作基本工具 更多...
#include "atomic_wait.hpp"类 | |
| struct | atomic_flag |
| 原子标志 更多... | |
| struct | atomic_base< T > |
| 原子类型基础模板类 更多... | |
| struct | atomic_base< T * > |
| 指针类型的原子操作特化 更多... | |
| struct | atomic_float_base< Float > |
| 浮点数原子操作基础类 更多... | |
| struct | atomic_ref_base< T, false, false > |
| 通用类型的原子引用特化 更多... | |
| struct | atomic_ref_base< T, true, false > |
| 整数类型的原子引用特化 更多... | |
| struct | atomic_ref_base< Float, false, true > |
| 浮点类型的原子引用特化 更多... | |
类型定义 | |
| template<typename T> | |
| using | atomic_diff_t = conditional_t<is_pointer_v<T>, ptrdiff_t, remove_volatile_t<T>> |
| 原子操作的差值类型 | |
枚举 | |
| enum class | memory_order : int32_t { memory_order::relaxed , memory_order::consume , memory_order::acquire , memory_order::release , memory_order::acq_rel , memory_order::seq_cst } |
| 内存顺序 更多... | |
| enum class | memory_order_modifier : int64_t { memory_order_modifier::memory_order_mask = 0x0ffff , memory_order_modifier::memory_order_modifier_mask = 0xffff0000 , memory_order_modifier::memory_order_hle_acquire = 0x10000 , memory_order_modifier::memory_order_hle_release = 0x20000 } |
| 内存顺序修饰符枚举 更多... | |
函数 | |
| constexpr memory_order | operator| (memory_order mo, memory_order_modifier mod) noexcept |
| 内存顺序与修饰符的或操作符 | |
| constexpr memory_order | operator& (memory_order mo, memory_order_modifier mod) noexcept |
| 内存顺序与修饰符的与操作符 | |
| constexpr memory_order | cmpexch_failure_order (const memory_order mo) noexcept |
| 获取原子比较交换操作失败时的内存顺序 | |
| constexpr bool | is_valid_cmpexch_failure_order (const memory_order mo) noexcept |
| 检查比较交换失败内存顺序是否有效 | |
| MSTL_ALWAYS_INLINE_INLINE void | atomic_thread_fence (const memory_order mo) noexcept |
| 线程内存屏障 | |
| MSTL_ALWAYS_INLINE_INLINE void | atomic_signal_fence (const memory_order mo) noexcept |
| 信号内存屏障 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE void | atomic_store (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept |
| 原子存储操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_load (const volatile T *ptr, const memory_order mo) noexcept |
| 原子加载操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_exchange (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept |
| 原子交换操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE bool | atomic_cmpexch_weak (volatile T *ptr, remove_volatile_t< T > *expected, remove_volatile_t< T > desired, const memory_order success, const memory_order failure) noexcept |
| 弱比较交换操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE bool | atomic_cmpexch_strong (volatile T *ptr, remove_volatile_t< T > *expected, remove_volatile_t< T > desired, const memory_order success, const memory_order failure) noexcept |
| 强比较交换操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_fetch_add (volatile T *ptr, atomic_diff_t< T > value, const memory_order mo) noexcept |
| 原子获取并添加操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_fetch_sub (volatile T *ptr, atomic_diff_t< T > value, const memory_order mo) noexcept |
| 原子获取并减去操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_fetch_and (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept |
| 原子获取并与操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_fetch_or (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept |
| 原子获取并或操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_fetch_xor (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept |
| 原子获取并异或操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_add_fetch (volatile T *ptr, atomic_diff_t< T > value, memory_order mo) noexcept |
| 原子添加并获取操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_sub_fetch (volatile T *ptr, atomic_diff_t< T > value, memory_order mo) noexcept |
| 原子减去并获取操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_and_fetch (volatile T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept |
| 原子与并获取操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_or_fetch (volatile T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept |
| 原子或并获取操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_xor_fetch (volatile T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept |
| 原子异或并获取操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE bool | atomic_cmpexch_weak_any (volatile T *ptr, remove_volatile_t< T > *expected, remove_volatile_t< T > *desired, const memory_order success, const memory_order failure) noexcept |
| 通用弱比较交换操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE bool | atomic_cmpexch_strong_any (volatile T *ptr, remove_volatile_t< T > *expected, remove_volatile_t< T > *desired, const memory_order success, const memory_order failure) noexcept |
| 通用强比较交换操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE void | atomic_store_any (T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept |
| 通用原子存储操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_load_any (const T *ptr, memory_order mo) noexcept |
| 通用原子加载操作 | |
| template<typename T> | |
| MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > | atomic_exchange_any (T *ptr, remove_volatile_t< T > desired, memory_order mo) noexcept |
| 通用原子交换操作 | |
| template<typename T> | |
| T | atomic_fetch_add_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept |
| 通用原子获取并添加操作 | |
| template<typename T> | |
| T | atomic_fetch_sub_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept |
| 通用原子获取并减去操作 | |
| template<typename T> | |
| T | atomic_add_fetch_any (T *ptr, remove_volatile_t< T > value) noexcept |
| 通用原子添加并获取操作 | |
| template<typename T> | |
| T | atomic_sub_fetch_any (T *ptr, remove_volatile_t< T > value) noexcept |
| 通用原子减去并获取操作 | |
| template<size_t Size, size_t Align> | |
| constexpr bool | is_always_lock_free () noexcept |
| 检查是否支持无锁操作 | |
变量 | |
| MSTL_INLINE17 constexpr auto | memory_order_relaxed = memory_order::relaxed |
| 宽松内存顺序常量 | |
| MSTL_INLINE17 constexpr auto | memory_order_consume = memory_order::consume |
| 数据依赖内存顺序常量 | |
| MSTL_INLINE17 constexpr auto | memory_order_acquire = memory_order::acquire |
| 获取内存顺序常量 | |
| MSTL_INLINE17 constexpr auto | memory_order_release = memory_order::release |
| 释放内存顺序常量 | |
| MSTL_INLINE17 constexpr auto | memory_order_acq_rel = memory_order::acq_rel |
| 获取-释放内存顺序常量 | |
| MSTL_INLINE17 constexpr auto | memory_order_seq_cst = memory_order::seq_cst |
| 顺序一致性内存顺序常量 | |