NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
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
222constexpr memory_order operator|(memory_order mo, memory_order_modifier mod) noexcept {
223 return static_cast<memory_order>(static_cast<int64_t>(mo) | static_cast<int64_t>(mod));
224}
225
236constexpr memory_order operator&(memory_order mo, memory_order_modifier mod) noexcept {
237 return static_cast<memory_order>(static_cast<int64_t>(mo) & static_cast<int64_t>(mod));
238}
239
240
251 retry_possible = 1 << 1,
254 debug_hit = 1 << 4,
255 nested_abort = 1 << 5
256};
257
258#endif
259
260
273constexpr memory_order cmpexch_failure_order(const memory_order mo) noexcept {
274#ifdef NEFORCE_SUPPORT_INTEL_TSX
275 constexpr auto mask = memory_order_modifier::memory_order_mask;
276 const memory_order base_mo = mo & mask;
277 const memory_order failure_order = base_mo == memory_order_acq_rel ? memory_order_acquire
279 : base_mo;
280 constexpr auto modifier_mask = memory_order_modifier::memory_order_modifier_mask;
281 const auto modifiers = static_cast<memory_order_modifier>(mo & modifier_mask);
282 return failure_order | modifiers;
283#else
284 const memory_order failure_order = mo == memory_order_acq_rel ? memory_order_acquire
286 : mo;
287 return failure_order;
288#endif
289}
290
297constexpr bool is_valid_cmpexch_failure_order(const memory_order mo) noexcept {
298#ifdef NEFORCE_SUPPORT_INTEL_TSX
301#else
302 return mo != memory_order_release && mo != memory_order_acq_rel;
303#endif
304}
305 // MemoryOrder
307 // AsyncComponents
309
310NEFORCE_END_NAMESPACE__
311#endif // NEFORCE_CORE_ASYNC_MEMORY_ORDER_HPP__
long int64_t
64位有符号整数类型
unsigned int uint32_t
32位无符号整数类型
int int32_t
32位有符号整数类型
constexpr enable_if_t< is_floating_point_v< T >, T > mod(const T x, const T y)
浮点数取模运算
constexpr auto memory_order_release
释放内存顺序常量
constexpr auto memory_order_seq_cst
顺序一致性内存顺序常量
constexpr memory_order cmpexch_failure_order(const memory_order mo) noexcept
获取原子比较交换操作失败时的内存顺序
constexpr auto memory_order_acq_rel
获取-释放内存顺序常量
constexpr auto memory_order_acquire
获取内存顺序常量
memory_order
内存顺序
constexpr auto memory_order_consume
数据依赖内存顺序常量
rtm_status_flag
RTM事务状态标志位定义
constexpr bool is_valid_cmpexch_failure_order(const memory_order mo) noexcept
检查比较交换失败内存顺序是否有效
memory_order_modifier
内存顺序修饰符枚举
constexpr auto memory_order_relaxed
宽松内存顺序常量
@ release
释放操作,确保前面的读写不会被重排到后面
@ seq_cst
顺序一致性,最严格的内存顺序
@ relaxed
最宽松的内存顺序,只保证原子性
@ acquire
获取操作,确保后续读写不会被重排到前面
@ consume
数据依赖顺序,用于依赖读取的场景
@ acq_rel
获取-释放组合操作
@ buffer_overflow
事务缓冲区溢出
@ xabort_explicit
由XABORT指令显式中止
@ memory_conflict
与其他逻辑处理器内存冲突
@ retry_possible
重试可能成功
@ nested_abort
嵌套事务中止
@ memory_order_rtm_begin
RTM事务开始修饰符
@ memory_order_rtm_end
RTM事务结束修饰符
@ memory_order_rtm_abort
RTM事务中止修饰符
@ memory_order_hle_acquire
HLE获取修饰符
@ memory_order_hle_release
HLE释放修饰符
基本类型别名