MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
原子操作

原子变量的操作 更多...

struct  atomic< T >
 通用原子类型模板 更多...
struct  atomic< T * >
 指针类型的原子特化 更多...
struct  atomic< T & >
 引用类型的原子特化 更多...
struct  atomic< bool >
 bool类型的原子特化 更多...
struct  atomic< char >
 char类型的原子特化 更多...
struct  atomic< signed char >
 signed char类型的原子特化 更多...
struct  atomic< unsigned char >
 unsigned char类型的原子特化 更多...
struct  atomic< short >
 short类型的原子特化 更多...
struct  atomic< unsigned short >
 unsigned short类型的原子特化 更多...
struct  atomic< int >
 int类型的原子特化 更多...
struct  atomic< unsigned int >
 unsigned int类型的原子特化 更多...
struct  atomic< long >
 long类型的原子特化 更多...
struct  atomic< unsigned long >
 unsigned long类型的原子特化 更多...
struct  atomic< long long >
 long long类型的原子特化 更多...
struct  atomic< unsigned long long >
 unsigned long long类型的原子特化 更多...
struct  atomic< wchar_t >
 wchar_t类型的原子特化 更多...
struct  atomic< char16_t >
 char16_t类型的原子特化 更多...
struct  atomic< char32_t >
 char32_t类型的原子特化 更多...
struct  atomic< float >
 float类型的原子特化 更多...
struct  atomic< double >
 double类型的原子特化 更多...
struct  atomic< long double >
 long double类型的原子特化 更多...
struct  atomic_flag
 原子标志 更多...
struct  atomic_base< T >
 原子类型基础模板类 更多...
struct  atomic_base< T * >
 指针类型的原子操作特化 更多...
struct  atomic_float_base< Float >
 浮点数原子操作基础类 更多...
struct  atomic_ref_base< T, IsIntegral, IsFloatingPoint >
 原子引用基础模板类 更多...
struct  atomic_ref_base< T, false, false >
 通用类型的原子引用特化 更多...
struct  atomic_ref_base< T, true, false >
 整数类型的原子引用特化 更多...
struct  atomic_ref_base< Float, false, true >
 浮点类型的原子引用特化 更多...
struct  timed_backoff_spin_policy
 带退避策略的定时自旋策略 更多...
struct  default_spin_policy
 默认自旋策略 更多...

类型定义

using atomic_bool = atomic<bool>
 布尔原子类型
using atomic_schar = atomic<signed char>
 有符号字符原子类型
using atomic_uchar = atomic<unsigned char>
 无符号字符原子类型
using atomic_short = atomic<short>
 短整型原子类型
using atomic_ushort = atomic<unsigned short>
 无符号短整型原子类型
using atomic_int = atomic<int>
 整型原子类型
using atomic_uint = atomic<unsigned int>
 无符号整型原子类型
using atomic_long = atomic<long>
 长整型原子类型
using atomic_ulong = atomic<unsigned long>
 无符号长整型原子类型
using atomic_llong = atomic<long long>
 长长整型原子类型
using atomic_ullong = atomic<unsigned long long>
 无符号长长整型原子类型
using atomic_float = atomic<float>
 单精度浮点数原子类型
using atomic_double = atomic<double>
 双精度浮点数原子类型
using atomic_ldouble = atomic<long double>
 扩展精度浮点数原子类型
using atomic_char = atomic<char>
 字符原子类型
using atomic_wchar_t = atomic<wchar_t>
 宽字符原子类型
using atomic_char16_t = atomic<char16_t>
 UTF-16字符原子类型
using atomic_char32_t = atomic<char32_t>
 UTF-32字符原子类型
using atomic_int8_t = atomic<int8_t>
 8位有符号整数原子类型
using atomic_uint8_t = atomic<uint8_t>
 8位无符号整数原子类型
using atomic_int16_t = atomic<int16_t>
 16位有符号整数原子类型
using atomic_uint16_t = atomic<uint16_t>
 16位无符号整数原子类型
using atomic_int32_t = atomic<int32_t>
 32位有符号整数原子类型
using atomic_uint32_t = atomic<uint32_t>
 32位无符号整数原子类型
using atomic_int64_t = atomic<int64_t>
 64位有符号整数原子类型
using atomic_uint64_t = atomic<uint64_t>
 64位无符号整数原子类型
using atomic_float32 = atomic<float32_t>
 32位浮点数原子类型
using atomic_float64 = atomic<float64_t>
 64位浮点数原子类型
using atomic_decimal = atomic<decimal_t>
 十进制浮点数原子类型
using atomic_intptr_t = atomic<intptr_t>
 有符号指针整数原子类型
using atomic_uintptr_t = atomic<uintptr_t>
 无符号指针整数原子类型
using atomic_size_t = atomic<size_t>
 大小类型原子类型
using atomic_ptrdiff_t = atomic<ptrdiff_t>
 指针差值类型原子类型
using atomic_intmax_t = atomic<intmax_t>
 最大有符号整数原子类型
using atomic_uintmax_t = atomic<uintmax_t>
 最大无符号整数原子类型
template<typename T>
using atomic_diff_t = conditional_t<is_pointer_v<T>, ptrdiff_t, remove_volatile_t<T>>
 原子操作的差值类型

函数

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>
atomic_fetch_add_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 通用原子获取并添加操作
template<typename T>
atomic_fetch_sub_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 通用原子获取并减去操作
template<typename T>
atomic_add_fetch_any (T *ptr, remove_volatile_t< T > value) noexcept
 通用原子添加并获取操作
template<typename 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
 检查是否支持无锁操作
template<typename T, typename Func, typename Clock, typename Dur>
bool atomic_wait_address_until_v (const T *addr, T &&old, Func &&func, const time_point< Clock, Dur > &timeout) noexcept
 基于值的原子定时等待(绝对时间)
template<typename T, typename Pred, typename Clock, typename Dur>
bool atomic_wait_address_until (const T *addr, Pred pred, const time_point< Clock, Dur > &timeout) noexcept
 基于谓词的原子定时等待(绝对时间)
template<typename Pred, typename Clock, typename Dur>
bool atomic_wait_address_until (const platform_wait_t *addr, Pred pred, const time_point< Clock, Dur > &timeout) noexcept
 基于谓词的原子定时等待(绝对时间)
template<typename T, typename Func, typename Rep, typename Period>
bool atomic_wait_address_for_v (const T *addr, T &&old, Func &&func, const duration< Rep, Period > &rt) noexcept
 基于值的原子定时等待(相对时间)
template<typename T, typename Pred, typename Rep, typename Period>
bool atomic_wait_address_for (const T *addr, Pred pred, const duration< Rep, Period > &rt) noexcept
 基于谓词的原子定时等待(相对时间)
template<typename Pred, typename Rep, typename Period>
bool atomic_wait_address_for (const platform_wait_t *addr, Pred pred, const duration< Rep, Period > &rt) noexcept
 基于谓词的原子定时等待(相对时间)
template<typename Pred, typename Spin = default_spin_policy>
bool atomic_spin (Pred &pred, Spin spin=Spin{}) noexcept
 原子自旋等待
template<typename T, typename Func>
void atomic_wait_address_v (const T *addr, T old, Func f) noexcept
 基于值的原子等待
template<typename T, typename Pred>
void atomic_wait_address (const T *addr, Pred pred) noexcept
 基于谓词的原子等待
template<typename T>
void atomic_notify_address (const T *addr, const bool all) noexcept
 原子通知

详细描述

原子变量的操作

类型定义说明

◆ atomic_diff_t

template<typename T>
using atomic_diff_t = conditional_t<is_pointer_v<T>, ptrdiff_t, remove_volatile_t<T>>

原子操作的差值类型

模板参数
T原始类型

在文件 atomic_base.hpp544 行定义.

函数说明

◆ atomic_add_fetch()

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

原子添加并获取操作

模板参数
T数据类型
参数
ptr目标指针
value要添加的值
mo内存顺序
返回
添加后的值
注解
要求操作类型为整形

在文件 atomic_base.hpp911 行定义.

引用了 _MSTL , 以及 atomic_fetch_add().

被这些函数引用 atomic_base< char >::operator++(), atomic_base< char >::operator++(), atomic_ref_base< T, true, false >::operator++(), atomic_base< char >::operator+=(), atomic_base< char >::operator+=() , 以及 atomic_ref_base< T, true, false >::operator+=().

◆ atomic_add_fetch_any()

template<typename T>
T atomic_add_fetch_any ( T * ptr,
remove_volatile_t< T > value )
noexcept

通用原子添加并获取操作

模板参数
T浮点类型
参数
ptr目标指针
value要添加的值
返回
添加后的值

在文件 atomic_base.hpp1286 行定义.

引用了 _MSTL, atomic_cmpexch_weak_any(), atomic_load(), memory_order_relaxed , 以及 memory_order_seq_cst.

被这些函数引用 atomic_float_base< Float >::operator+=(), atomic_float_base< Float >::operator+=() , 以及 atomic_ref_base< Float, false, true >::operator+=().

◆ atomic_and_fetch()

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

原子与并获取操作

模板参数
T数据类型
参数
ptr目标指针
value要进行与操作的值
mo内存顺序
返回
操作后的值
注解
要求操作类型为整形

在文件 atomic_base.hpp951 行定义.

引用了 _MSTL , 以及 atomic_fetch_and().

被这些函数引用 atomic_base< char >::operator&=(), atomic_base< char >::operator&=() , 以及 atomic_ref_base< T, true, false >::operator&=().

◆ atomic_cmpexch_strong()

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

◆ atomic_cmpexch_strong_any()

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

通用强比较交换操作

模板参数
T数据类型
参数
ptr目标指针
expected期望值的指针
desired期望设置的值
success成功时的内存顺序
failure失败时的内存顺序
返回
是否交换成功
注解
强比较交换保证不伪失败

在文件 atomic_base.hpp1140 行定义.

引用了 _INNER, is_valid_cmpexch_failure_order(), memory_order_seq_cst , 以及 success.

被这些函数引用 atomic< int8_t >::compare_exchange_strong(), atomic< int8_t >::compare_exchange_strong(), atomic_base< char >::compare_exchange_strong(), atomic_base< char >::compare_exchange_strong(), atomic_base< T * >::compare_exchange_strong() , 以及 atomic_base< T * >::compare_exchange_strong().

◆ atomic_cmpexch_weak()

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

◆ atomic_cmpexch_weak_any()

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

通用弱比较交换操作

模板参数
T数据类型
参数
ptr目标指针
expected期望值的指针
desired期望设置的值
success成功时的内存顺序
failure失败时的内存顺序
返回
是否交换成功
注解
弱比较交换可能伪失败,需要循环重试

在文件 atomic_base.hpp1014 行定义.

引用了 _INNER, is_valid_cmpexch_failure_order(), memory_order_seq_cst , 以及 success.

被这些函数引用 atomic_add_fetch_any(), atomic_exchange_any(), atomic_fetch_add_any(), atomic_fetch_sub_any(), atomic_store_any(), atomic_sub_fetch_any(), atomic< int8_t >::compare_exchange_weak(), atomic< int8_t >::compare_exchange_weak(), atomic_base< char >::compare_exchange_weak(), atomic_base< char >::compare_exchange_weak(), atomic_base< T * >::compare_exchange_weak() , 以及 atomic_base< T * >::compare_exchange_weak().

◆ atomic_exchange()

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

原子交换操作

模板参数
T数据类型
参数
ptr目标指针
value交换的值
mo内存顺序
返回
交换前的值
注解
要求操作类型为整形

在文件 atomic_base.hpp603 行定义.

引用了 _INNER , 以及 memory_order_seq_cst.

被这些函数引用 atomic_base< char >::exchange(), atomic_base< char >::exchange() , 以及 atomic_ref_base< T, true, false >::exchange().

◆ atomic_exchange_any()

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

通用原子交换操作

模板参数
T数据类型
参数
ptr目标指针
desired要交换的值
mo内存顺序
返回
交换前的值
注解
用于非整数类型的原子交换

在文件 atomic_base.hpp1227 行定义.

引用了 _MSTL, addressof(), atomic_cmpexch_weak_any(), atomic_load() , 以及 memory_order_relaxed.

被这些函数引用 atomic< int8_t >::exchange(), atomic< int8_t >::exchange(), atomic_float_base< Float >::exchange(), atomic_float_base< Float >::exchange(), atomic_ref_base< Float, false, true >::exchange() , 以及 atomic_ref_base< T, false, false >::exchange().

◆ atomic_fetch_add()

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

原子获取并添加操作

模板参数
T数据类型
参数
ptr目标指针
value要添加的值
mo内存顺序
返回
添加前的值
注解
要求操作类型为整形

在文件 atomic_base.hpp795 行定义.

引用了 _INNER , 以及 memory_order_seq_cst.

被这些函数引用 atomic_add_fetch(), atomic_fetch_sub(), atomic_base< char >::fetch_add(), atomic_base< char >::fetch_add(), atomic_base< T * >::fetch_add(), atomic_base< T * >::fetch_add(), atomic_ref_base< T, true, false >::fetch_add() , 以及 counting_semaphore< 1 >::release().

◆ atomic_fetch_add_any()

template<typename T>
T atomic_fetch_add_any ( T * ptr,
remove_volatile_t< T > value,
memory_order mo )
noexcept

通用原子获取并添加操作

模板参数
T浮点类型
参数
ptr目标指针
value要添加的值
mo内存顺序
返回
添加前的值

在文件 atomic_base.hpp1251 行定义.

引用了 _MSTL, atomic_cmpexch_weak_any(), atomic_load() , 以及 memory_order_relaxed.

被这些函数引用 atomic_float_base< Float >::fetch_add(), atomic_float_base< Float >::fetch_add() , 以及 atomic_ref_base< Float, false, true >::fetch_add().

◆ atomic_fetch_and()

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

原子获取并与操作

模板参数
T数据类型
参数
ptr目标指针
value要进行与操作的值
mo内存顺序
返回
操作前的值
注解
要求操作类型为整形

在文件 atomic_base.hpp839 行定义.

引用了 _INNER , 以及 memory_order_seq_cst.

被这些函数引用 atomic_and_fetch(), atomic_base< char >::fetch_and(), atomic_base< char >::fetch_and() , 以及 atomic_ref_base< T, true, false >::fetch_and().

◆ atomic_fetch_or()

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

原子获取并或操作

模板参数
T数据类型
参数
ptr目标指针
value要进行或操作的值
mo内存顺序
返回
操作前的值
注解
要求操作类型为整形

在文件 atomic_base.hpp863 行定义.

引用了 _INNER , 以及 memory_order_seq_cst.

被这些函数引用 atomic_or_fetch(), atomic_base< char >::fetch_or(), atomic_base< char >::fetch_or() , 以及 atomic_ref_base< T, true, false >::fetch_or().

◆ atomic_fetch_sub()

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

原子获取并减去操作

模板参数
T数据类型
参数
ptr目标指针
value要减去的值
mo内存顺序
返回
减去前的值
注解
要求操作类型为整形

在文件 atomic_base.hpp819 行定义.

引用了 _MSTL , 以及 atomic_fetch_add().

被这些函数引用 atomic_sub_fetch(), latch::count_down(), atomic_base< char >::fetch_sub(), atomic_base< char >::fetch_sub() , 以及 atomic_ref_base< T, true, false >::fetch_sub().

◆ atomic_fetch_sub_any()

template<typename T>
T atomic_fetch_sub_any ( T * ptr,
remove_volatile_t< T > value,
memory_order mo )
noexcept

通用原子获取并减去操作

模板参数
T浮点类型
参数
ptr目标指针
value要减去的值
mo内存顺序
返回
减去前的值

在文件 atomic_base.hpp1269 行定义.

引用了 _MSTL, atomic_cmpexch_weak_any(), atomic_load() , 以及 memory_order_relaxed.

被这些函数引用 atomic_float_base< Float >::fetch_sub(), atomic_float_base< Float >::fetch_sub() , 以及 atomic_ref_base< Float, false, true >::fetch_sub().

◆ atomic_fetch_xor()

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

原子获取并异或操作

模板参数
T数据类型
参数
ptr目标指针
value要进行异或操作的值
mo内存顺序
返回
操作前的值
注解
要求操作类型为整形

在文件 atomic_base.hpp887 行定义.

引用了 _INNER , 以及 memory_order_seq_cst.

被这些函数引用 atomic_xor_fetch(), atomic_base< char >::fetch_xor(), atomic_base< char >::fetch_xor() , 以及 atomic_ref_base< T, true, false >::fetch_xor().

◆ atomic_load()

template<typename T>
MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > atomic_load ( const volatile T * ptr,
const memory_order mo )
noexcept

原子加载操作

模板参数
T数据类型
参数
ptr源指针
mo内存顺序
返回
加载的值
注解
要求操作类型为整形

在文件 atomic_base.hpp579 行定义.

引用了 memory_order_acquire , 以及 memory_order_seq_cst.

被这些函数引用 atomic_add_fetch_any(), atomic_exchange_any(), atomic_fetch_add_any(), atomic_fetch_sub_any(), atomic_sub_fetch_any(), atomic_base< char >::load(), atomic_base< char >::load(), atomic_ref_base< T, true, false >::load() , 以及 latch::try_wait().

◆ atomic_load_any()

template<typename T>
MSTL_ALWAYS_INLINE_INLINE remove_volatile_t< T > atomic_load_any ( const T * ptr,
memory_order mo )
noexcept

通用原子加载操作

模板参数
T数据类型
参数
ptr源指针
mo内存顺序
返回
加载的值
注解
用于非整数类型的原子加载

在文件 atomic_base.hpp1200 行定义.

引用了 _MSTL, memory_copy(), memory_order_acquire , 以及 memory_order_seq_cst.

被这些函数引用 atomic< int8_t >::load(), atomic< int8_t >::load(), atomic_float_base< Float >::load(), atomic_float_base< Float >::load(), atomic_ref_base< Float, false, true >::load() , 以及 atomic_ref_base< T, false, false >::load().

◆ atomic_notify_address()

◆ atomic_or_fetch()

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

原子或并获取操作

模板参数
T数据类型
参数
ptr目标指针
value要进行或操作的值
mo内存顺序
返回
操作后的值
注解
要求操作类型为整形

在文件 atomic_base.hpp971 行定义.

引用了 _MSTL , 以及 atomic_fetch_or().

被这些函数引用 atomic_base< char >::operator|=(), atomic_base< char >::operator|=() , 以及 atomic_ref_base< T, true, false >::operator|=().

◆ atomic_spin()

template<typename Pred, typename Spin = default_spin_policy>
bool atomic_spin ( Pred & pred,
Spin spin = Spin{} )
noexcept

原子自旋等待

模板参数
Pred谓词类型
Spin自旋策略类型
参数
pred等待条件谓词,当返回true时停止等待
spin自旋策略对象
返回
是否因为谓词为true而停止等待

实现自旋等待机制:

  1. 前16次循环中快速检查谓词
  2. 前12次使用relax
  3. 后4次使用yield
  4. 然后根据自旋策略继续等待

在文件 atomic_wait.hpp47 行定义.

被这些函数引用 counting_semaphore< 1 >::try_acquire().

◆ atomic_store()

template<typename T>
MSTL_ALWAYS_INLINE_INLINE void atomic_store ( volatile T * ptr,
remove_volatile_t< T > value,
const memory_order mo )
noexcept

原子存储操作

模板参数
T数据类型
参数
ptr目标指针
value存储的值
mo内存顺序
注解
要求操作类型为整形

在文件 atomic_base.hpp557 行定义.

引用了 _INNER, memory_order_release , 以及 memory_order_seq_cst.

被这些函数引用 atomic_flag::clear(), atomic_flag::clear(), atomic_base< char >::store(), atomic_base< char >::store() , 以及 atomic_ref_base< T, true, false >::store().

◆ atomic_store_any()

template<typename T>
MSTL_ALWAYS_INLINE_INLINE void atomic_store_any ( T * ptr,
remove_volatile_t< T > value,
const memory_order mo )
noexcept

通用原子存储操作

模板参数
T数据类型
参数
ptr目标指针
value要存储的值
mo内存顺序
注解
用于非整数类型的原子存储

在文件 atomic_base.hpp1179 行定义.

引用了 _MSTL, addressof(), atomic_cmpexch_weak_any() , 以及 memory_order_relaxed.

被这些函数引用 atomic< int8_t >::store(), atomic< int8_t >::store(), atomic_float_base< Float >::store(), atomic_float_base< Float >::store(), atomic_ref_base< Float, false, true >::store() , 以及 atomic_ref_base< T, false, false >::store().

◆ atomic_sub_fetch()

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

原子减去并获取操作

模板参数
T数据类型
参数
ptr目标指针
value要减去的值
mo内存顺序
返回
减去后的值
注解
要求操作类型为整形

在文件 atomic_base.hpp931 行定义.

引用了 _MSTL , 以及 atomic_fetch_sub().

被这些函数引用 atomic_base< char >::operator--(), atomic_base< char >::operator--(), atomic_ref_base< T, true, false >::operator--(), atomic_base< char >::operator-=(), atomic_base< char >::operator-=() , 以及 atomic_ref_base< T, true, false >::operator-=().

◆ atomic_sub_fetch_any()

template<typename T>
T atomic_sub_fetch_any ( T * ptr,
remove_volatile_t< T > value )
noexcept

通用原子减去并获取操作

模板参数
T浮点类型
参数
ptr目标指针
value要减去的值
返回
减去后的值

在文件 atomic_base.hpp1303 行定义.

引用了 _MSTL, atomic_cmpexch_weak_any(), atomic_load(), memory_order_relaxed , 以及 memory_order_seq_cst.

被这些函数引用 atomic_float_base< Float >::operator-=(), atomic_float_base< Float >::operator-=() , 以及 atomic_ref_base< Float, false, true >::operator-=().

◆ atomic_wait_address()

template<typename T, typename Pred>
void atomic_wait_address ( const T * addr,
Pred pred )
noexcept

基于谓词的原子等待

模板参数
T地址类型
Pred谓词类型
参数
addr原子变量地址
pred等待条件谓词,当返回true时停止等待

等待直到pred()返回true。

在文件 atomic_wait.hpp414 行定义.

引用了 _INNER.

被这些函数引用 counting_semaphore< 1 >::acquire(), latch::wait() , 以及 tree_barrier< CmplFunc >::wait().

◆ atomic_wait_address_for() [1/2]

template<typename Pred, typename Rep, typename Period>
bool atomic_wait_address_for ( const platform_wait_t * addr,
Pred pred,
const duration< Rep, Period > & rt )
noexcept

基于谓词的原子定时等待(相对时间)

模板参数
Pred谓词类型
Rep时间表示类型
Period时间单位比例
参数
addr平台等待类型地址
pred等待条件谓词
rt相对超时时间
返回
是否在超时前条件满足

针对平台等待类型的特化版本,使用裸等待器。

在文件 atomic_timed_wait.hpp492 行定义.

引用了 _INNER.

◆ atomic_wait_address_for() [2/2]

template<typename T, typename Pred, typename Rep, typename Period>
bool atomic_wait_address_for ( const T * addr,
Pred pred,
const duration< Rep, Period > & rt )
noexcept

基于谓词的原子定时等待(相对时间)

模板参数
T地址类型
Pred谓词类型
Rep时间表示类型
Period时间单位比例
参数
addr原子变量地址
pred等待条件谓词
rt相对超时时间
返回
是否在超时前条件满足

等待直到pred()返回true或经过指定时间。

在文件 atomic_timed_wait.hpp473 行定义.

引用了 _INNER.

被这些函数引用 counting_semaphore< 1 >::try_acquire_for().

◆ atomic_wait_address_for_v()

template<typename T, typename Func, typename Rep, typename Period>
bool atomic_wait_address_for_v ( const T * addr,
T && old,
Func && func,
const duration< Rep, Period > & rt )
noexcept

基于值的原子定时等待(相对时间)

模板参数
T值类型
Func获取当前值的函数类型
Rep时间表示类型
Period时间单位比例
参数
addr原子变量地址
old期望的值
func获取当前值的函数
rt相对超时时间
返回
是否在超时前条件满足

等待直到addr处的值不等于old或经过指定时间。

在文件 atomic_timed_wait.hpp453 行定义.

引用了 _INNER.

◆ atomic_wait_address_until() [1/2]

template<typename Pred, typename Clock, typename Dur>
bool atomic_wait_address_until ( const platform_wait_t * addr,
Pred pred,
const time_point< Clock, Dur > & timeout )
noexcept

基于谓词的原子定时等待(绝对时间)

模板参数
Pred谓词类型
Clock时钟类型
Dur持续时间类型
参数
addr平台等待类型地址
pred等待条件谓词
timeout超时时间点
返回
是否在超时前条件满足

针对平台等待类型的特化版本,使用裸等待器。

在文件 atomic_timed_wait.hpp432 行定义.

引用了 _INNER , 以及 timeout.

◆ atomic_wait_address_until() [2/2]

template<typename T, typename Pred, typename Clock, typename Dur>
bool atomic_wait_address_until ( const T * addr,
Pred pred,
const time_point< Clock, Dur > & timeout )
noexcept

基于谓词的原子定时等待(绝对时间)

模板参数
T地址类型
Pred谓词类型
Clock时钟类型
Dur持续时间类型
参数
addr原子变量地址
pred等待条件谓词
timeout超时时间点
返回
是否在超时前条件满足

等待直到pred()返回true或超时。

在文件 atomic_timed_wait.hpp413 行定义.

引用了 _INNER , 以及 timeout.

被这些函数引用 counting_semaphore< 1 >::try_acquire_until().

◆ atomic_wait_address_until_v()

template<typename T, typename Func, typename Clock, typename Dur>
bool atomic_wait_address_until_v ( const T * addr,
T && old,
Func && func,
const time_point< Clock, Dur > & timeout )
noexcept

基于值的原子定时等待(绝对时间)

模板参数
T值类型
Func获取当前值的函数类型
Clock时钟类型
Dur持续时间类型
参数
addr原子变量地址
old期望的值
func获取当前值的函数
timeout超时时间点
返回
是否在超时前条件满足

等待直到addr处的值不等于old或超时。

在文件 atomic_timed_wait.hpp393 行定义.

引用了 _INNER , 以及 timeout.

◆ atomic_wait_address_v()

template<typename T, typename Func>
void atomic_wait_address_v ( const T * addr,
T old,
Func f )
noexcept

基于值的原子等待

模板参数
T值类型
Func获取当前值的函数类型
参数
addr原子变量地址
old期望的值
f获取当前值的函数

等待直到addr处的值不等于old。

在文件 atomic_wait.hpp399 行定义.

引用了 _INNER.

被这些函数引用 atomic_base< char >::wait(), atomic_base< T * >::wait(), atomic_flag::wait(), atomic_flag::wait(), atomic_float_base< Float >::wait(), atomic_ref_base< Float, false, true >::wait(), atomic_ref_base< T, false, false >::wait() , 以及 atomic_ref_base< T, true, false >::wait().

◆ atomic_xor_fetch()

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

原子异或并获取操作

模板参数
T数据类型
参数
ptr目标指针
value要进行异或操作的值
mo内存顺序
返回
操作后的值
注解
要求操作类型为整形

在文件 atomic_base.hpp991 行定义.

引用了 _MSTL , 以及 atomic_fetch_xor().

被这些函数引用 atomic_base< char >::operator^=(), atomic_base< char >::operator^=() , 以及 atomic_ref_base< T, true, false >::operator^=().

◆ is_always_lock_free()

template<size_t Size, size_t Align>
bool is_always_lock_free ( )
constexprnoexcept

检查是否支持无锁操作

模板参数
Size数据类型大小
Align数据对齐要求
返回
是否支持无锁操作

在文件 atomic_base.hpp1320 行定义.

引用了 _INNER.