NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
原子操作

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

原子操作 的协作图:

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

类型定义

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

函数

void neforce::atomic_thread_fence (const memory_order mo) noexcept
 线程内存屏障
void neforce::atomic_signal_fence (const memory_order mo) noexcept
 信号内存屏障
template<typename T>
void neforce::atomic_store (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept
 原子存储操作
template<typename T>
remove_volatile_t< T > neforce::atomic_load (const volatile T *ptr, const memory_order mo) noexcept
 原子加载操作
template<typename T>
remove_volatile_t< T > neforce::atomic_exchange (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept
 原子交换操作
template<typename T>
bool neforce::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>
bool neforce::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>
remove_volatile_t< T > neforce::atomic_fetch_add (volatile T *ptr, atomic_diff_t< T > value, const memory_order mo) noexcept
 原子获取并添加操作
template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_sub (volatile T *ptr, atomic_diff_t< T > value, const memory_order mo) noexcept
 原子获取并减去操作
template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_and (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept
 原子获取并与操作
template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_or (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept
 原子获取并或操作
template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_xor (volatile T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept
 原子获取并异或操作
template<typename T>
remove_volatile_t< T > neforce::atomic_add_fetch (volatile T *ptr, atomic_diff_t< T > value, memory_order mo) noexcept
 原子添加并获取操作
template<typename T>
remove_volatile_t< T > neforce::atomic_sub_fetch (volatile T *ptr, atomic_diff_t< T > value, memory_order mo) noexcept
 原子减去并获取操作
template<typename T>
remove_volatile_t< T > neforce::atomic_and_fetch (volatile T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 原子与并获取操作
template<typename T>
remove_volatile_t< T > neforce::atomic_or_fetch (volatile T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 原子或并获取操作
template<typename T>
remove_volatile_t< T > neforce::atomic_xor_fetch (volatile T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 原子异或并获取操作
template<typename T>
bool neforce::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>
bool neforce::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>
void neforce::atomic_store_any (T *ptr, remove_volatile_t< T > value, const memory_order mo) noexcept
 通用原子存储操作
template<typename T>
remove_volatile_t< T > neforce::atomic_load_any (const T *ptr, memory_order mo) noexcept
 通用原子加载操作
template<typename T>
remove_volatile_t< T > neforce::atomic_exchange_any (T *ptr, remove_volatile_t< T > desired, memory_order mo) noexcept
 通用原子交换操作
template<typename T>
neforce::atomic_fetch_add_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 通用原子获取并添加操作
template<typename T>
neforce::atomic_fetch_sub_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 通用原子获取并减去操作
template<typename T>
neforce::atomic_add_fetch_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 通用原子添加并获取操作
template<typename T>
neforce::atomic_sub_fetch_any (T *ptr, remove_volatile_t< T > value, memory_order mo) noexcept
 通用原子减去并获取操作
template<size_t Size, size_t Align>
constexpr bool neforce::is_always_lock_free () noexcept
 检查是否支持无锁操作
template<typename T, typename Func, typename Clock, typename Dur>
bool neforce::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 neforce::atomic_wait_address_until (const T *addr, Pred pred, const time_point< Clock, Dur > &timeout) noexcept
 基于谓词的原子定时等待(绝对时间)
template<typename Pred, typename Clock, typename Dur>
bool neforce::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 neforce::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 neforce::atomic_wait_address_for (const T *addr, Pred pred, const duration< Rep, Period > &rt) noexcept
 基于谓词的原子定时等待(相对时间)
template<typename Pred, typename Rep, typename Period>
bool neforce::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 neforce::atomic_spin (Pred &pred, Spin spin=Spin{}) noexcept
 原子自旋等待
template<typename T, typename Func>
void neforce::atomic_wait_address_v (const T *addr, T old, Func f) noexcept
 基于值的原子等待
template<typename T, typename Pred>
void neforce::atomic_wait_address (const T *addr, Pred pred) noexcept
 基于谓词的原子等待
template<typename T>
void neforce::atomic_notify_address (const T *addr, const bool all) noexcept
 原子通知

详细描述

原子变量的操作

类型定义说明

◆ atomic_diff_t

原子操作的差值类型

模板参数
T原始类型

在文件 atomic_base.hpp473 行定义.

函数说明

◆ atomic_add_fetch()

template<typename T>
remove_volatile_t< T > neforce::atomic_add_fetch ( volatile T * ptr,
atomic_diff_t< T > value,
memory_order mo )
inlinenoexcept

原子添加并获取操作

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

在文件 atomic_base.hpp849 行定义.

引用了 atomic_add_fetch(), atomic_fetch_add() , 以及 is_integral_v.

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

◆ atomic_add_fetch_any()

template<typename T>
T neforce::atomic_add_fetch_any ( T * ptr,
remove_volatile_t< T > value,
memory_order mo )
noexcept

通用原子添加并获取操作

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

在文件 atomic_base.hpp1219 行定义.

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

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

◆ atomic_and_fetch()

template<typename T>
remove_volatile_t< T > neforce::atomic_and_fetch ( volatile T * ptr,
remove_volatile_t< T > value,
memory_order mo )
inlinenoexcept

原子与并获取操作

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

在文件 atomic_base.hpp889 行定义.

引用了 atomic_and_fetch(), atomic_fetch_and() , 以及 is_integral_v.

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

◆ atomic_cmpexch_strong()

template<typename T>
bool neforce::atomic_cmpexch_strong ( volatile T * ptr,
remove_volatile_t< T > * expected,
remove_volatile_t< T > desired,
const memory_order success,
const memory_order failure )
inlinenoexcept

强比较交换操作

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

在文件 atomic_base.hpp698 行定义.

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

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

◆ atomic_cmpexch_strong_any()

template<typename T>
bool neforce::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 )
inlinenoexcept

通用强比较交换操作

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

在文件 atomic_base.hpp1073 行定义.

引用了 atomic_cmpexch_strong_any(), atomic_cmpexch_weak_any(), is_valid_cmpexch_failure_order(), memory_compare(), memory_order_seq_cst, NEFORCE_CONSTEXPR_ASSERT , 以及 success.

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

◆ atomic_cmpexch_weak()

template<typename T>
bool neforce::atomic_cmpexch_weak ( volatile T * ptr,
remove_volatile_t< T > * expected,
remove_volatile_t< T > desired,
const memory_order success,
const memory_order failure )
inlinenoexcept

弱比较交换操作

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

在文件 atomic_base.hpp557 行定义.

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

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

◆ atomic_cmpexch_weak_any()

template<typename T>
bool neforce::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 )
inlinenoexcept

通用弱比较交换操作

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

在文件 atomic_base.hpp952 行定义.

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

被这些函数引用 atomic_add_fetch_any(), atomic_cmpexch_strong_any(), atomic_cmpexch_weak_any(), atomic_exchange_any(), atomic_fetch_add_any(), atomic_fetch_sub_any(), atomic_store_any(), atomic_sub_fetch_any(), neforce::atomic< T >::compare_exchange_weak(), neforce::atomic< T >::compare_exchange_weak(), neforce::atomic_base< char >::compare_exchange_weak(), neforce::atomic_base< char >::compare_exchange_weak(), neforce::atomic_base< T * >::compare_exchange_weak(), neforce::atomic_base< T * >::compare_exchange_weak(), neforce::atomic_float_base< Float >::compare_exchange_weak(), neforce::atomic_float_base< Float >::compare_exchange_weak(), neforce::atomic_float_base< Float >::compare_exchange_weak(), neforce::atomic_float_base< Float >::compare_exchange_weak(), neforce::atomic_ref_base< Float, false, true >::compare_exchange_weak(), neforce::atomic_ref_base< Float, false, true >::compare_exchange_weak(), neforce::atomic_ref_base< T *, false, false >::compare_exchange_weak(), neforce::atomic_ref_base< T *, false, false >::compare_exchange_weak(), neforce::atomic_ref_base< T, false, false >::compare_exchange_weak() , 以及 neforce::atomic_ref_base< T, false, false >::compare_exchange_weak().

◆ atomic_exchange()

template<typename T>
remove_volatile_t< T > neforce::atomic_exchange ( volatile T * ptr,
remove_volatile_t< T > value,
const memory_order mo )
inlinenoexcept

原子交换操作

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

在文件 atomic_base.hpp530 行定义.

引用了 atomic_exchange(), is_integral_v , 以及 memory_order_seq_cst.

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

◆ atomic_exchange_any()

template<typename T>
remove_volatile_t< T > neforce::atomic_exchange_any ( T * ptr,
remove_volatile_t< T > desired,
memory_order mo )
inlinenoexcept

◆ atomic_fetch_add()

template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_add ( volatile T * ptr,
atomic_diff_t< T > value,
const memory_order mo )
inlinenoexcept

原子获取并添加操作

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

在文件 atomic_base.hpp733 行定义.

引用了 atomic_fetch_add(), is_integral_v , 以及 memory_order_seq_cst.

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

◆ atomic_fetch_add_any()

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

◆ atomic_fetch_and()

template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_and ( volatile T * ptr,
remove_volatile_t< T > value,
const memory_order mo )
inlinenoexcept

原子获取并与操作

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

在文件 atomic_base.hpp777 行定义.

引用了 atomic_fetch_and(), is_integral_v , 以及 memory_order_seq_cst.

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

◆ atomic_fetch_or()

template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_or ( volatile T * ptr,
remove_volatile_t< T > value,
const memory_order mo )
inlinenoexcept

原子获取并或操作

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

在文件 atomic_base.hpp801 行定义.

引用了 atomic_fetch_or(), is_integral_v , 以及 memory_order_seq_cst.

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

◆ atomic_fetch_sub()

template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_sub ( volatile T * ptr,
atomic_diff_t< T > value,
const memory_order mo )
inlinenoexcept

原子获取并减去操作

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

在文件 atomic_base.hpp757 行定义.

引用了 atomic_fetch_add(), atomic_fetch_sub() , 以及 is_integral_v.

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

◆ atomic_fetch_sub_any()

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

◆ atomic_fetch_xor()

template<typename T>
remove_volatile_t< T > neforce::atomic_fetch_xor ( volatile T * ptr,
remove_volatile_t< T > value,
const memory_order mo )
inlinenoexcept

原子获取并异或操作

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

在文件 atomic_base.hpp825 行定义.

引用了 atomic_fetch_xor(), is_integral_v , 以及 memory_order_seq_cst.

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

◆ atomic_load()

template<typename T>
remove_volatile_t< T > neforce::atomic_load ( const volatile T * ptr,
const memory_order mo )
inlinenoexcept

原子加载操作

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

在文件 atomic_base.hpp507 行定义.

引用了 atomic_load(), is_integral_v, memory_order_acquire , 以及 memory_order_seq_cst.

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

◆ atomic_load_any()

◆ atomic_notify_address()

◆ atomic_or_fetch()

template<typename T>
remove_volatile_t< T > neforce::atomic_or_fetch ( volatile T * ptr,
remove_volatile_t< T > value,
memory_order mo )
inlinenoexcept

原子或并获取操作

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

在文件 atomic_base.hpp909 行定义.

引用了 atomic_fetch_or(), atomic_or_fetch() , 以及 is_integral_v.

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

◆ atomic_signal_fence()

void neforce::atomic_signal_fence ( const memory_order mo)
inlinenoexcept

信号内存屏障

参数
mo内存顺序

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

在文件 atomic_base.hpp83 行定义.

引用了 atomic_signal_fence() , 以及 memory_order_relaxed.

被这些函数引用 atomic_signal_fence().

◆ atomic_spin()

template<typename Pred, typename Spin = default_spin_policy>
bool neforce::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_spin().

被这些函数引用 atomic_spin() , 以及 neforce::atomic_semaphore< 1 >::try_acquire().

◆ atomic_store()

template<typename T>
void neforce::atomic_store ( volatile T * ptr,
remove_volatile_t< T > value,
const memory_order mo )
inlinenoexcept

原子存储操作

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

在文件 atomic_base.hpp485 行定义.

引用了 atomic_store(), is_integral_v, memory_order_release , 以及 memory_order_seq_cst.

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

◆ atomic_store_any()

template<typename T>
void neforce::atomic_store_any ( T * ptr,
remove_volatile_t< T > value,
const memory_order mo )
inlinenoexcept

◆ atomic_sub_fetch()

template<typename T>
remove_volatile_t< T > neforce::atomic_sub_fetch ( volatile T * ptr,
atomic_diff_t< T > value,
memory_order mo )
inlinenoexcept

原子减去并获取操作

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

在文件 atomic_base.hpp869 行定义.

引用了 atomic_fetch_sub(), atomic_sub_fetch() , 以及 is_integral_v.

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

◆ atomic_sub_fetch_any()

template<typename T>
T neforce::atomic_sub_fetch_any ( T * ptr,
remove_volatile_t< T > value,
memory_order mo )
noexcept

通用原子减去并获取操作

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

在文件 atomic_base.hpp1237 行定义.

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

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

◆ atomic_thread_fence()

void neforce::atomic_thread_fence ( const memory_order mo)
inlinenoexcept

线程内存屏障

参数
mo内存顺序

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

在文件 atomic_base.hpp45 行定义.

引用了 atomic_thread_fence(), memory_order_acquire, memory_order_consume, memory_order_relaxed , 以及 memory_order_seq_cst.

被这些函数引用 atomic_thread_fence().

◆ atomic_wait_address()

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

基于谓词的原子等待

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

等待直到pred()返回true。

在文件 atomic_wait.hpp433 行定义.

引用了 atomic_wait_address().

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

◆ atomic_wait_address_for() [1/2]

template<typename Pred, typename Rep, typename Period>
bool neforce::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.hpp474 行定义.

引用了 atomic_wait_address_for().

◆ atomic_wait_address_for() [2/2]

template<typename T, typename Pred, typename Rep, typename Period>
bool neforce::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.hpp456 行定义.

引用了 atomic_wait_address_for().

被这些函数引用 atomic_wait_address_for(), atomic_wait_address_for() , 以及 neforce::atomic_semaphore< 1 >::try_acquire_for().

◆ atomic_wait_address_for_v()

template<typename T, typename Func, typename Rep, typename Period>
bool neforce::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.hpp437 行定义.

引用了 atomic_wait_address_for_v().

被这些函数引用 atomic_wait_address_for_v().

◆ atomic_wait_address_until() [1/2]

template<typename Pred, typename Clock, typename Dur>
bool neforce::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.hpp417 行定义.

引用了 atomic_wait_address_until() , 以及 timeout.

◆ atomic_wait_address_until() [2/2]

template<typename T, typename Pred, typename Clock, typename Dur>
bool neforce::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.hpp399 行定义.

引用了 atomic_wait_address_until() , 以及 timeout.

被这些函数引用 atomic_wait_address_until(), atomic_wait_address_until() , 以及 neforce::atomic_semaphore< 1 >::try_acquire_until().

◆ atomic_wait_address_until_v()

template<typename T, typename Func, typename Clock, typename Dur>
bool neforce::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.hpp380 行定义.

引用了 atomic_wait_address_until_v() , 以及 timeout.

被这些函数引用 atomic_wait_address_until_v().

◆ atomic_wait_address_v()

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

◆ atomic_xor_fetch()

template<typename T>
remove_volatile_t< T > neforce::atomic_xor_fetch ( volatile T * ptr,
remove_volatile_t< T > value,
memory_order mo )
inlinenoexcept

原子异或并获取操作

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

在文件 atomic_base.hpp929 行定义.

引用了 atomic_fetch_xor(), atomic_xor_fetch() , 以及 is_integral_v.

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

◆ is_always_lock_free()