NexusForce 1.0.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< char8_t >
 char8_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
 默认自旋策略 更多...
struct  atomic< shared_ptr< T > >
 shared_ptr的原子特化 更多...
struct  atomic< weak_ptr< T > >
 weak_ptr的原子特化 更多...

类型定义

template<typename T>
using atomic_diff_t = conditional_t<is_pointer_v<T>, ptrdiff_t, remove_volatile_t<T>>
 原子操作的差值类型

函数

NEFORCE_ALWAYS_INLINE_INLINE void atomic_thread_fence (const memory_order mo) noexcept
 线程内存屏障
NEFORCE_ALWAYS_INLINE_INLINE void atomic_signal_fence (const memory_order mo) noexcept
 信号内存屏障
template<typename T>
NEFORCE_ALWAYS_INLINE_INLINE void atomic_store (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept
 原子存储操作
template<typename T>
NEFORCE_ALWAYS_INLINE_INLINE remove_volatile_t< T > atomic_load (const volatile T *ptr, const memory_order mo) noexcept
 原子加载操作
template<typename T>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_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>
NEFORCE_ALWAYS_INLINE_INLINE void atomic_store_any (T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept
 通用原子存储操作
template<typename T>
NEFORCE_ALWAYS_INLINE_INLINE remove_volatile_t< T > atomic_load_any (const T *ptr, memory_order mo) noexcept
 通用原子加载操作
template<typename T>
NEFORCE_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, memory_order mo) noexcept
 通用原子添加并获取操作
template<typename T>
atomic_sub_fetch_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 通用原子减去并获取操作
template<size_t Size, size_t Align>
NEFORCE_CONSTEXPR17 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.hpp378 行定义.

函数说明

◆ atomic_add_fetch()

template<typename T>
NEFORCE_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.hpp754 行定义.

引用了 atomic_fetch_add() , 以及 is_integral_v.

被这些函数引用 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,
memory_order mo )
noexcept

通用原子添加并获取操作

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

在文件 atomic_base.hpp1122 行定义.

引用了 atomic_cmpexch_weak_any(), atomic_load_any() , 以及 memory_order_relaxed.

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

◆ atomic_and_fetch()

template<typename T>
NEFORCE_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.hpp794 行定义.

引用了 atomic_fetch_and() , 以及 is_integral_v.

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

◆ atomic_cmpexch_strong()

template<typename T>
NEFORCE_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

强比较交换操作

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

在文件 atomic_base.hpp603 行定义.

引用了 atomic_cmpexch_weak(), is_integral_v, is_valid_cmpexch_failure_order(), NEFORCE_CONSTEXPR_ASSERT , 以及 success.

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

◆ atomic_cmpexch_strong_any()

template<typename T>
NEFORCE_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

◆ atomic_cmpexch_weak()

template<typename T>
NEFORCE_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

弱比较交换操作

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

在文件 atomic_base.hpp462 行定义.

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

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

◆ atomic_cmpexch_weak_any()

◆ atomic_exchange()

template<typename T>
NEFORCE_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.hpp435 行定义.

引用了 is_integral_v , 以及 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>
NEFORCE_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.hpp1061 行定义.

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

被这些函数引用 atomic< T >::exchange(), atomic< 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>
NEFORCE_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.hpp638 行定义.

引用了 is_integral_v , 以及 memory_order_seq_cst.

被这些函数引用 atomic_add_fetch(), atomic_fetch_sub(), atomic_base< char >::fetch_add(), atomic_base< char >::fetch_add(), atomic_ref_base< T, true, false >::fetch_add() , 以及 atomic_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.hpp1086 行定义.

引用了 atomic_cmpexch_weak_any(), atomic_load_any() , 以及 memory_order_relaxed.

被这些函数引用 atomic_base< T * >::fetch_add(), atomic_base< T * >::fetch_add(), 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>
NEFORCE_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.hpp682 行定义.

引用了 is_integral_v , 以及 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>
NEFORCE_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.hpp706 行定义.

引用了 is_integral_v , 以及 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>
NEFORCE_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.hpp662 行定义.

引用了 atomic_fetch_add() , 以及 is_integral_v.

被这些函数引用 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.hpp1104 行定义.

引用了 atomic_cmpexch_weak_any(), atomic_load_any() , 以及 memory_order_relaxed.

被这些函数引用 atomic_base< T * >::fetch_sub(), atomic_base< T * >::fetch_sub(), 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>
NEFORCE_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.hpp730 行定义.

引用了 is_integral_v , 以及 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>
NEFORCE_ALWAYS_INLINE_INLINE remove_volatile_t< T > atomic_load ( const volatile T * ptr,
const memory_order mo )
noexcept

原子加载操作

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

在文件 atomic_base.hpp412 行定义.

引用了 is_integral_v, memory_order_acquire , 以及 memory_order_seq_cst.

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

◆ atomic_load_any()

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

通用原子加载操作

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

在文件 atomic_base.hpp1035 行定义.

引用了 memory_copy(), 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< T >::load(), atomic< 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>
NEFORCE_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.hpp814 行定义.

引用了 atomic_fetch_or() , 以及 is_integral_v.

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

◆ atomic_signal_fence()

NEFORCE_ALWAYS_INLINE_INLINE void atomic_signal_fence ( const memory_order mo)
noexcept

信号内存屏障

参数
mo内存顺序

在同一线程内的信号处理程序和普通代码间插入内存屏障。

在文件 atomic_base.hpp69 行定义.

引用了 memory_order_relaxed.

◆ 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.hpp53 行定义.

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

◆ atomic_store()

template<typename T>
NEFORCE_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.hpp390 行定义.

引用了 is_integral_v, 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>
NEFORCE_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.hpp1015 行定义.

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

被这些函数引用 atomic< T >::store(), atomic< 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>
NEFORCE_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.hpp774 行定义.

引用了 atomic_fetch_sub() , 以及 is_integral_v.

被这些函数引用 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,
memory_order mo )
noexcept

通用原子减去并获取操作

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

在文件 atomic_base.hpp1140 行定义.

引用了 atomic_cmpexch_weak_any(), atomic_load_any() , 以及 memory_order_relaxed.

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

◆ atomic_thread_fence()

NEFORCE_ALWAYS_INLINE_INLINE void atomic_thread_fence ( const memory_order mo)
noexcept

线程内存屏障

参数
mo内存顺序

在不同线程间插入内存屏障,确保内存操作的顺序性。

在文件 atomic_base.hpp37 行定义.

引用了 memory_order_acquire, memory_order_consume, memory_order_relaxed , 以及 memory_order_seq_cst.

◆ 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.hpp429 行定义.

被这些函数引用 atomic_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.hpp485 行定义.

◆ 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.hpp467 行定义.

被这些函数引用 atomic_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.hpp448 行定义.

◆ 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.hpp428 行定义.

引用了 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.hpp410 行定义.

引用了 timeout.

被这些函数引用 atomic_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.hpp391 行定义.

引用了 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.hpp414 行定义.

被这些函数引用 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>
NEFORCE_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.hpp834 行定义.

引用了 atomic_fetch_xor() , 以及 is_integral_v.

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

◆ is_always_lock_free()