MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
lock_free_queue< T > 模板类 参考

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

#include <lock_free_queue.hpp>

Public 成员函数

 lock_free_queue ()
 默认构造函数
 ~lock_free_queue ()
 析构函数
void push (T new_value)
 入队操作
unique_ptr< T > pop ()
 出队操作
unique_ptr< T > try_pop ()
 尝试出队操作
bool empty () const noexcept
 检查队列是否为空
size_t size () const noexcept
 获取队列中元素的近似数量
void clear ()
 清空队列

详细描述

template<typename T>
class lock_free_queue< T >

无锁队列类模板

模板参数
T元素类型

基于原子操作和引用计数实现的多生产者多消费者无锁队列。 使用Michael-Scott算法实现,支持并发push和pop操作。

注解
采用ABA问题预防机制

在文件 lock_free_queue.hpp33 行定义.

构造及析构函数说明

◆ lock_free_queue()

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

默认构造函数

初始化队列,创建哨兵节点作为初始的头尾节点。

在文件 lock_free_queue.hpp197 行定义.

◆ ~lock_free_queue()

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

析构函数

清空队列并删除哨兵节点。

在文件 lock_free_queue.hpp210 行定义.

引用了 pop().

成员函数说明

◆ clear()

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

清空队列

循环调用pop()直到队列为空,删除所有元素。

警告
此方法不是线程安全的! 调用clear()时,应确保没有其他线程同时进行push或pop操作。 如果有并发的push操作,clear可能永远无法完成。
注解
建议在单线程环境或确保独占访问时调用此方法。

在文件 lock_free_queue.hpp355 行定义.

引用了 _MSTL , 以及 pop().

◆ empty()

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

检查队列是否为空

返回
如果队列为空返回true,否则返回false
注解
由于无锁队列的并发特性,此方法返回的结果可能瞬间失效。 仅用于监控和统计,不应用于同步控制。

在文件 lock_free_queue.hpp324 行定义.

引用了 _MSTL , 以及 memory_order_acquire.

◆ pop()

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

出队操作

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

从队列头部弹出元素,支持多线程并发出队。 使用CAS操作保证线程安全。

在文件 lock_free_queue.hpp261 行定义.

引用了 _MSTL, atomic< T >::exchange(), atomic< T >::load(), make_unique(), memory_order_relaxed , 以及 next().

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

◆ push()

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

入队操作

参数
new_value要入队的新值

将新值压入队列尾部,支持多线程并发入队。 使用CAS操作保证线程安全。

在文件 lock_free_queue.hpp223 行定义.

引用了 _MSTL, atomic< T >::compare_exchange_strong(), atomic< T >::load() , 以及 memory_order_relaxed.

◆ size()

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

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

返回
队列中元素的近似数量
注解
由于无锁队列的并发特性,返回值可能不精确。 此方法通过维护入队和出队计数器来计算队列大小。 仅用于监控和统计,不应用于同步控制。

在文件 lock_free_queue.hpp338 行定义.

引用了 _MSTL , 以及 memory_order_relaxed.

◆ try_pop()

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

尝试出队操作

返回
出队元素的unique_ptr,如果队列为空或竞争失败则返回空指针

尝试从队列头部弹出元素,最多重试3次。 如果队列为空或多次CAS失败,则返回空指针。

注解
此方法不会自旋等待,适合在高竞争环境下使用

在文件 lock_free_queue.hpp290 行定义.

引用了 _MSTL, atomic< T >::exchange(), atomic< T >::load(), make_unique(), memory_order_relaxed , 以及 next().


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