Share via


concurrent_queue 类

concurrent_queue 类是允许对其元素进行先进先出访问的序列容器类。 它支持一组有限的并发安全操作,例如 pushtry_pop。 在这里,并发安全意味着指针或迭代器始终有效。 它不保证元素初始化或特定的遍历顺序。

语法

template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;

参数

T
要存储在队列中的元素的数据类型。

_Ax
一种表示存储的分配器对象的类型,该分配器对象封装有关此并发队列的内存分配和解除分配的详细信息。 此参数为可选参数,默认值为 allocator<T>

成员

公共 Typedef

名称 描述
allocator_type 一种表示适用于并发队列的分配器类的类型。
const_iterator 一种表示并发队列中元素的非线程安全 const 迭代器的类型。
const_reference 一个类型,它提供对存储于并发队列中供读取和执行 const 操作的 const 元素的引用。
difference_type 一个类型,它提供并发队列中两个元素之间的有符号距离。
iterator 一种表示并发队列中元素的非线程安全迭代器的类型。
reference 一个类型,它提供对并发队列中存储的某个元素的引用。
size_type 一个类型,它计算并发队列中元素的数量。
value_type 一个类型,它表示存储在并发队列中的数据类型。

公共构造函数

名称 描述
concurrent_queue 已重载。 构造并发队列。
~concurrent_queue 析构函数 销毁并发队列。

公共方法

名称 描述
clear 清除并发队列,销毁任何当前排队的元素。 此方法不是并发安全方法。
empty 测试在调用此方法时并发队列是否为空。 此方法是并发安全的。
get_allocator 返回用于构造并发队列的分配器的副本。 此方法是并发安全的。
push 已重载。 在并发队列的尾端将项进行排队。 此方法是并发安全的。
try_pop 如果队列中有可用的项,则取消将项进行排队。 此方法是并发安全的。
unsafe_begin 已重载。 将 iteratorconst_iterator 类型的迭代器返回到并发队列的开头。 此方法不是并发安全方法。
unsafe_end 已重载。 将 iteratorconst_iterator 类型的迭代器返回到并发队列的末尾。 此方法不是并发安全方法。
unsafe_size 返回队列中的项数。 此方法不是并发安全方法。

备注

有关详细信息,请参阅并行容器和对象

继承层次结构

concurrent_queue

要求

标头:concurrent_queue.h

命名空间: 并发

clear

清除并发队列,销毁任何当前排队的元素。 此方法不是并发安全方法。

void clear();

concurrent_queue

构造并发队列。

explicit concurrent_queue(
    const allocator_type& _Al = allocator_type());

concurrent_queue(
    const concurrent_queue& _OtherQ,
    const allocator_type& _Al = allocator_type());

concurrent_queue(
    concurrent_queue&& _OtherQ,
    const allocator_type& _Al = allocator_type());

template<typename _InputIterator>
concurrent_queue(_InputIterator _Begin,
    _InputIterator _End);

参数

_InputIterator
指定值范围的输入迭代器的类型。

_Al
要用于此对象的分配器类。

_OtherQ
要从中复制或移动元素的源 concurrent_queue 对象。

_Begin
要复制的元素范围内的第一个元素的位置。

_End
要复制的元素范围外的第一个元素的位置。

注解

所有构造函数都存储一个分配器对象 _Al 并初始化队列。

第一个构造函数指定一个空的初始队列,并显式指定要使用的分配器类型。

第二个构造函数指定并发队列 _OtherQ 的副本。

第三个构造函数指定并发队列 _OtherQ 的移动。

第四个构造函数指定由迭代器范围 [ _Begin, _End) 提供的值。

~concurrent_queue

销毁并发队列。

~concurrent_queue();

empty

测试在调用此方法时并发队列是否为空。 此方法是并发安全的。

bool empty() const;

返回值

如果并发队列在我们查看时为空,则返回 true,否则返回 false

备注

虽然此方法对于对 pushtry_popempty 方法的调用是并发安全的,但在调用线程检查返回的值时,返回的值可能不正确。

get_allocator

返回用于构造并发队列的分配器的副本。 此方法是并发安全的。

allocator_type get_allocator() const;

返回值

用于构造并发队列的分配器的副本。

push

在并发队列的尾端将项进行排队。 此方法是并发安全的。

void push(const T& _Src);

void push(T&& _Src);

参数

_Src
要添加到队列的项。

备注

对于对方法 pushtry_popempty 的调用,push 是并发安全的。

try_pop

如果队列中有可用的项,则取消将项进行排队。 此方法是并发安全的。

bool try_pop(T& _Dest);

参数

_Dest
对存储已取消排队的项的位置的引用。

返回值

如果已成功取消项的排队,则返回 true,否则返回 false

备注

如果项已成功取消排队,参数 _Dest 将接收已取消排队的值,队列中保存的原始值将被销毁,并且此函数将返回 true。 如果没有要取消排队的项,则此函数将在无阻塞的情况下返回 false,并且参数 _Dest 的内容未定义。

对于对方法 pushtry_popempty 的调用,try_pop 是并发安全的。

unsafe_begin

iteratorconst_iterator 类型的迭代器返回到并发队列的开头。 此方法不是并发安全方法。

iterator unsafe_begin();

const_iterator unsafe_begin() const;

返回值

指向并发队列对象开头的 iteratorconst_iterator 类型的迭代器。

备注

concurrent_queue 类的迭代器主要用于调试,因为它们很慢,并且对于其他队列操作来说迭代不是并发安全的。

unsafe_end

iteratorconst_iterator 类型的迭代器返回到并发队列的末尾。 此方法不是并发安全方法。

iterator unsafe_end();

const_iterator unsafe_end() const;

返回值

指向并发队列末尾的 iteratorconst_iterator 类型的迭代器。

备注

concurrent_queue 类的迭代器主要用于调试,因为它们很慢,并且对于其他队列操作来说迭代不是并发安全的。

unsafe_size

返回队列中的项数。 此方法不是并发安全方法。

size_type unsafe_size() const;

返回值

并发队列的大小。

注解

unsafe_size 不是并发安全的,如果在调用方法 pushtry_popempty 的同时调用它,则可能会生成不正确的结果。

另请参阅

并发命名空间