NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
neforce::lock_free_queue< T > 模板类 参考

无锁队列类模板 更多...

#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 索引初始容量

详细描述

template<typename T>
class neforce::lock_free_queue< T >

无锁队列类模板

模板参数
T元素类型

基于 per-producer SPSC 子队列架构实现的无锁队列。 每个生产者线程拥有独立的 block-based SPSC 内队列,block 通过无锁 free_list 回收利用。 支持多生产者多消费者并发 push/try_pop 操作。

在文件 lock_free_queue.hpp73 行定义.

构造及析构函数说明

◆ lock_free_queue()

template<typename T>
neforce::lock_free_queue< T >::lock_free_queue ( size_t capacity = 32 * BLOCK_SIZE)
inlineexplicit

构造函数

参数
capacity预分配的元素容量

预分配指定容量的 block 池,减少运行时堆分配。 容量按 BLOCK_SIZE 向上取整。

在文件 lock_free_queue.hpp719 行定义.

引用了 BLOCK_SIZE , 以及 neforce::memory_order_relaxed.

◆ ~lock_free_queue()

template<typename T>
neforce::lock_free_queue< T >::~lock_free_queue ( )
inline

析构函数

销毁所有生产者、哈希表、回收池中的 block 和初始 block 池。

警告
析构时不能有并发操作

在文件 lock_free_queue.hpp732 行定义.

引用了 neforce::memory_order_relaxed, neforce::next() , 以及 neforce::prev().

成员函数说明

◆ clear()

template<typename T>
void neforce::lock_free_queue< T >::clear ( )
inline

清空队列

警告
此方法不是线程安全的,调用者需保证无并发操作

在文件 lock_free_queue.hpp867 行定义.

引用了 neforce::this_thread::relax() , 以及 try_pop().

◆ empty()

template<typename T>
bool neforce::lock_free_queue< T >::empty ( ) const
inlinenodiscard

检查队列是否为空

返回
队列为空返回 true
注解
由于并发特性,返回值可能瞬间失效

在文件 lock_free_queue.hpp841 行定义.

引用了 neforce::memory_order_acquire.

◆ pop()

template<typename T>
unique_ptr< T > neforce::lock_free_queue< T >::pop ( )
inline

阻塞出队操作

返回
出队元素的 unique_ptr

在文件 lock_free_queue.hpp826 行定义.

引用了 neforce::this_thread::relax() , 以及 try_pop().

◆ push()

template<typename T>
void neforce::lock_free_queue< T >::push ( T new_value)
inline

入队操作

参数
new_value要入队的元素

为当前线程自动创建隐式生产者。

注解
如果内存分配失败,入队操作会静默失败

在文件 lock_free_queue.hpp776 行定义.

引用了 neforce::move().

◆ size()

template<typename T>
size_t neforce::lock_free_queue< T >::size ( ) const
inlinenodiscard

获取队列中元素的近似数量

返回
元素数量的近似值
注解
由于并发特性,返回值可能瞬间失效

在文件 lock_free_queue.hpp855 行定义.

引用了 neforce::memory_order_acquire.

◆ try_pop()

template<typename T>
unique_ptr< T > neforce::lock_free_queue< T >::try_pop ( )
inline

非阻塞出队操作

返回
出队元素的 unique_ptr,队列为空则返回空指针

使用启发式扫描生产者链表,选择元素最多的生产者优先出队。 最多扫描 3 个非空生产者。

在文件 lock_free_queue.hpp790 行定义.

引用了 neforce::memory_order_acquire , 以及 neforce::move().

被这些函数引用 clear() , 以及 pop().


该类的文档由以下文件生成: