NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
memory_order.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_ASYNC_MEMORY_ORDER_HPP__
2#define NEFORCE_CORE_ASYNC_MEMORY_ORDER_HPP__
3
11
13NEFORCE_BEGIN_NAMESPACE__
14
20
156
171
173NEFORCE_INLINE17 constexpr auto memory_order_relaxed = memory_order::relaxed;
175NEFORCE_INLINE17 constexpr auto memory_order_consume = memory_order::consume;
177NEFORCE_INLINE17 constexpr auto memory_order_acquire = memory_order::acquire;
179NEFORCE_INLINE17 constexpr auto memory_order_release = memory_order::release;
181NEFORCE_INLINE17 constexpr auto memory_order_acq_rel = memory_order::acq_rel;
183NEFORCE_INLINE17 constexpr auto memory_order_seq_cst = memory_order::seq_cst;
184
185
186#if defined(NEFORCE_ARCH_X86) && defined(NEFORCE_USING_INTEL_TSX)
187
211
221 return static_cast<memory_order>(static_cast<int64_t>(mo) | static_cast<int64_t>(mod));
222}
223
233 return static_cast<memory_order>(static_cast<int64_t>(mo) & static_cast<int64_t>(mod));
234}
235
236
250 retry_possible = 1 << 1,
253 debug_hit = 1 << 4,
254 nested_abort = 1 << 5
255};
256
257#endif
258
259
272constexpr memory_order cmpexch_failure_order(const memory_order mo) noexcept {
273#ifdef NEFORCE_SUPPORT_INTEL_TSX
274 constexpr auto mask = memory_order_modifier::memory_order_mask;
275 const memory_order base_mo = mo & mask;
276 const memory_order failure_order = base_mo == memory_order_acq_rel ? memory_order_acquire
278 : base_mo;
279 constexpr auto modifier_mask = memory_order_modifier::memory_order_modifier_mask;
280 const auto modifiers = static_cast<memory_order_modifier>(mo & modifier_mask);
281 return failure_order | modifiers;
282#else
283 const memory_order failure_order = mo == memory_order_acq_rel ? memory_order_acquire
285 : mo;
286 return failure_order;
287#endif
288}
289
296constexpr bool is_valid_cmpexch_failure_order(const memory_order mo) noexcept {
297#ifdef NEFORCE_SUPPORT_INTEL_TSX
300#else
301 return mo != memory_order_release && mo != memory_order_acq_rel;
302#endif
303}
304 // MemoryOrder
306 // AsyncComponents
308
309NEFORCE_END_NAMESPACE__
310#endif // NEFORCE_CORE_ASYNC_MEMORY_ORDER_HPP__
unsigned int uint32_t
32位无符号整数类型
long long int64_t
64位有符号整数类型
int int32_t
32位有符号整数类型
constexpr enable_if_t< is_floating_point_v< T >, T > mod(const T x, const T y)
浮点数取模运算
constexpr bool is_valid_cmpexch_failure_order(const memory_order mo) noexcept
检查比较交换失败内存顺序是否有效
constexpr auto memory_order_release
释放内存顺序常量
constexpr auto memory_order_seq_cst
顺序一致性内存顺序常量
constexpr auto memory_order_relaxed
宽松内存顺序常量
constexpr memory_order operator|(memory_order mo, memory_order_modifier mod) noexcept
内存顺序与修饰符的或操作符
constexpr auto memory_order_acquire
获取内存顺序常量
constexpr auto memory_order_consume
数据依赖内存顺序常量
constexpr memory_order operator&(memory_order mo, memory_order_modifier mod) noexcept
内存顺序与修饰符的与操作符
constexpr auto memory_order_acq_rel
获取-释放内存顺序常量
memory_order
内存顺序
rtm_status_flag
RTM事务状态标志位定义
memory_order_modifier
内存顺序修饰符枚举
constexpr memory_order cmpexch_failure_order(const memory_order mo) noexcept
获取原子比较交换操作失败时的内存顺序
@ release
释放操作,确保前面的读写不会被重排到后面
@ seq_cst
顺序一致性,最严格的内存顺序
@ relaxed
最宽松的内存顺序,只保证原子性
@ acquire
获取操作,确保后续读写不会被重排到前面
@ consume
数据依赖顺序,用于依赖读取的场景
@ acq_rel
获取-释放组合操作
@ buffer_overflow
事务缓冲区溢出
@ xabort_explicit
由XABORT指令显式中止
@ debug_hit
调试断点命中
@ memory_conflict
与其他逻辑处理器内存冲突
@ retry_possible
重试可能成功
@ nested_abort
嵌套事务中止
@ memory_order_rtm_begin
RTM事务开始修饰符
@ memory_order_mask
内存顺序掩码
@ memory_order_rtm_end
RTM事务结束修饰符
@ memory_order_rtm_abort
RTM事务中止修饰符
@ memory_order_modifier_mask
修饰符掩码
@ memory_order_hle_acquire
HLE获取修饰符
@ memory_order_hle_release
HLE释放修饰符
基本类型别名