|
NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
|
无锁队列类模板 更多...
#include <lock_free_queue.hpp>
Public 成员函数 | |
| lock_free_queue (size_t capacity=32 *BLOCK_SIZE) | |
| 构造函数 | |
| ~lock_free_queue () | |
| 析构函数 | |
| void | push (T new_value) |
| 入队操作 | |
| unique_ptr< T > | try_pop () |
| 非阻塞出队操作 | |
| unique_ptr< T > | pop () |
| 阻塞出队操作 | |
| bool | empty () const |
| 检查队列是否为空 | |
| size_t | size () const |
| 获取队列中元素的近似数量 | |
| void | clear () |
| 清空队列 | |
静态 Public 属性 | |
| static constexpr size_t | BLOCK_SIZE = 32 |
| 每个 block 存储的元素数量 | |
| static constexpr size_t | INITIAL_IMPLICIT_PRODUCER_HASH_SIZE = 32 |
| 隐式生产者哈希表初始大小 | |
| static constexpr size_t | IMPLICIT_INITIAL_INDEX_SIZE = 32 |
| block 索引初始容量 | |
无锁队列类模板
| T | 元素类型 |
基于 per-producer SPSC 子队列架构实现的无锁队列。 每个生产者线程拥有独立的 block-based SPSC 内队列,block 通过无锁 free_list 回收利用。 支持多生产者多消费者并发 push/try_pop 操作。
在文件 lock_free_queue.hpp 第 73 行定义.
|
inlineexplicit |
构造函数
| capacity | 预分配的元素容量 |
预分配指定容量的 block 池,减少运行时堆分配。 容量按 BLOCK_SIZE 向上取整。
在文件 lock_free_queue.hpp 第 719 行定义.
引用了 BLOCK_SIZE , 以及 neforce::memory_order_relaxed.
|
inline |
析构函数
销毁所有生产者、哈希表、回收池中的 block 和初始 block 池。
在文件 lock_free_queue.hpp 第 732 行定义.
引用了 neforce::memory_order_relaxed, neforce::next() , 以及 neforce::prev().
|
inline |
清空队列
在文件 lock_free_queue.hpp 第 867 行定义.
引用了 neforce::this_thread::relax() , 以及 try_pop().
|
inlinenodiscard |
|
inline |
阻塞出队操作
在文件 lock_free_queue.hpp 第 826 行定义.
引用了 neforce::this_thread::relax() , 以及 try_pop().
|
inline |
入队操作
| new_value | 要入队的元素 |
为当前线程自动创建隐式生产者。
在文件 lock_free_queue.hpp 第 776 行定义.
引用了 neforce::move().
|
inlinenodiscard |
|
inline |
非阻塞出队操作
使用启发式扫描生产者链表,选择元素最多的生产者优先出队。 最多扫描 3 个非空生产者。
在文件 lock_free_queue.hpp 第 790 行定义.
引用了 neforce::memory_order_acquire , 以及 neforce::move().