Класс concurrent_queueconcurrent_queue Class

Класс concurrent_queue представляет собой класс контейнера последовательности, обеспечивающий доступ к элементам в порядке поступления.The concurrent_queue class is a sequence container class that allows first-in, first-out access to its elements. Он позволяет использовать ограниченный набор параллельно-безопасных операций, таких как push и try_pop.It enables a limited set of concurrency-safe operations, such as push and try_pop. В данном случае, безопасность с параллелизмом означает, что указатели или итераторы всегда действительны.Here, concurrency-safe means pointers or iterators are always valid. Не гарантируется инициализация элементов или определенный порядок обхода.It's not a guarantee of element initialization, or of a particular traversal order.

СинтаксисSyntax

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

ПараметрыParameters

TT
Тип данных элементов, которые должны храниться в очереди.The data type of the elements to be stored in the queue.

_Ax_Ax
Тип, представляющий сохраненный объект распределителя, который инкапсулирует сведения о выделении и освобождении памяти для этой параллельной очереди.The type that represents the stored allocator object that encapsulates details about the allocation and deallocation of memory for this concurrent queue. Этот аргумент является необязательным, и значением по умолчанию является allocator<T>.This argument is optional and the default value is allocator<T>.

ЭлементыMembers

Общедоступные определения типовPublic Typedefs

ИмяName ОписаниеDescription
allocator_type Тип, представляющий класс распределителя для параллельной очереди.A type that represents the allocator class for the concurrent queue.
const_iterator Тип, представляющий не потокобезопасный const итератор над элементами в параллельной очереди.A type that represents a non-thread-safe const iterator over elements in a concurrent queue.
const_reference Тип, предоставляющий ссылку на const элемент, хранящийся в параллельной очереди для чтения и выполнения const операций.A type that provides a reference to a const element stored in a concurrent queue for reading and performing const operations.
difference_type Тип, предоставляющий расстояние со знаком между двумя элементами в параллельной очереди.A type that provides the signed distance between two elements in a concurrent queue.
iterator Тип, представляющий не потокобезопасный итератор по элементам в параллельной очереди.A type that represents a non-thread-safe iterator over the elements in a concurrent queue.
reference Тип, предоставляющий ссылку на элемент, хранящийся в параллельной очереди.A type that provides a reference to an element stored in a concurrent queue.
size_type Тип, подсчитывающий количество элементов в параллельной очереди.A type that counts the number of elements in a concurrent queue.
value_type Тип, представляющий тип данных, хранящихся в параллельной очереди.A type that represents the data type stored in a concurrent queue.

Открытые конструкторыPublic Constructors

nameName ОписаниеDescription
concurrent_queueconcurrent_queue Перегружен.Overloaded. Конструирует параллельную очередь.Constructs a concurrent queue.
Деструктор ~ concurrent_queue~concurrent_queue Destructor Уничтожает параллельную очередь.Destroys the concurrent queue.

Открытые методыPublic Methods

nameName ОписаниеDescription
пустоclear Очищает параллельную очередь, уничтожая все текущие элементы, поставленные в очередь.Clears the concurrent queue, destroying any currently enqueued elements. Этот метод не является типобезопасным в режиме параллелизма.This method is not concurrency-safe.
emptyempty Проверяет, пуста ли параллельная очередь в момент вызова этого метода.Tests if the concurrent queue is empty at the moment this method is called. Этот метод является типобезопасным в режиме параллелизма.This method is concurrency-safe.
get_allocatorget_allocator Возвращает копию распределителя, используемую для создания параллельной очереди.Returns a copy of the allocator used to construct the concurrent queue. Этот метод является типобезопасным в режиме параллелизма.This method is concurrency-safe.
pushpush Перегружен.Overloaded. Ставит в очередь элемент в конце параллельной очереди.Enqueues an item at tail end of the concurrent queue. Этот метод является типобезопасным в режиме параллелизма.This method is concurrency-safe.
try_poptry_pop Удаляет элемент из очереди, если он доступен.Dequeues an item from the queue if one is available. Этот метод является типобезопасным в режиме параллелизма.This method is concurrency-safe.
unsafe_beginunsafe_begin Перегружен.Overloaded. Возвращает итератор типа iterator или const_iterator в начало параллельной очереди.Returns an iterator of type iterator or const_iterator to the beginning of the concurrent queue. Этот метод не является типобезопасным в режиме параллелизма.This method is not concurrency-safe.
unsafe_endunsafe_end Перегружен.Overloaded. Возвращает итератор типа iterator или const_iterator в конец параллельной очереди.Returns an iterator of type iterator or const_iterator to the end of the concurrent queue. Этот метод не является типобезопасным в режиме параллелизма.This method is not concurrency-safe.
unsafe_sizeunsafe_size Возвращает количество элементов в очереди.Returns the number of items in the queue. Этот метод не является типобезопасным в режиме параллелизма.This method is not concurrency-safe.

КомментарииRemarks

Дополнительные сведения см. в разделе Parallel Containers and Objects.For more information, see Parallel Containers and Objects.

Иерархия наследованияInheritance Hierarchy

concurrent_queue

ТребованияRequirements

Заголовок: concurrent_queue. hHeader: concurrent_queue.h

Пространство имен: параллелизмNamespace: concurrency

открытымclear

Очищает параллельную очередь, уничтожая все текущие элементы, поставленные в очередь.Clears the concurrent queue, destroying any currently enqueued elements. Этот метод не является типобезопасным в режиме параллелизма.This method is not concurrency-safe.

void clear();

concurrent_queueconcurrent_queue

Конструирует параллельную очередь.Constructs a 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);

ПараметрыParameters

_InputIterator_InputIterator
Тип итератора ввода, который задает диапазон значений.The type of the input iterator that specifies a range of values.

_Al_Al
Класс распределителя для использования с данным объектом.The allocator class to use with this object.

_OtherQ_OtherQ
Исходный объект concurrent_queue для копирования или перемещения элементов.The source concurrent_queue object to copy or move elements from.

_Begin_Begin
Положение первого элемента в диапазоне копируемых элементов.Position of the first element in the range of elements to be copied.

_End_End
Положение первого элемента за пределами диапазона копируемых элементов.Position of the first element beyond the range of elements to be copied.

КомментарииRemarks

Все конструкторы хранят объект распределителя _Al и инициализируют очередь.All constructors store an allocator object _Al and initialize the queue.

Первый конструктор указывает пустую исходную очередь и явно указывает тип распределителя для использования.The first constructor specifies an empty initial queue and explicitly specifies the allocator type to be used.

Второй конструктор задает копию параллельной очереди _OtherQ .The second constructor specifies a copy of the concurrent queue _OtherQ.

Третий конструктор задает перемещение параллельной очереди _OtherQ .The third constructor specifies a move of the concurrent queue _OtherQ.

Четвертый конструктор указывает значения, предоставляемые диапазоном итератора [ _Begin , _End ).The fourth constructor specifies values supplied by the iterator range [ _Begin, _End).

~ concurrent_queue~concurrent_queue

Уничтожает параллельную очередь.Destroys the concurrent queue.

~concurrent_queue();

указаноempty

Проверяет, пуста ли параллельная очередь в момент вызова этого метода.Tests if the concurrent queue is empty at the moment this method is called. Этот метод является типобезопасным в режиме параллелизма.This method is concurrency-safe.

bool empty() const;

Возвращаемое значениеReturn Value

true значение, если параллельная очередь была пуста в момент, когда мы искали, false в противном случае.true if the concurrent queue was empty at the moment we looked, false otherwise.

КомментарииRemarks

Хотя этот метод является типобезопасным по отношению к вызовам методов push , try_pop и empty , возвращаемое значение может быть неправильным на момент проверки вызывающим потоком.While this method is concurrency-safe with respect to calls to the methods push, try_pop, and empty, the value returned might be incorrect by the time it is inspected by the calling thread.

get_allocatorget_allocator

Возвращает копию распределителя, используемую для создания параллельной очереди.Returns a copy of the allocator used to construct the concurrent queue. Этот метод является типобезопасным в режиме параллелизма.This method is concurrency-safe.

allocator_type get_allocator() const;

Возвращаемое значениеReturn Value

Копия распределителя, используемая для создания параллельной очереди.A copy of the allocator used to construct the concurrent queue.

распространениеpush

Ставит в очередь элемент в конце параллельной очереди.Enqueues an item at tail end of the concurrent queue. Этот метод является типобезопасным в режиме параллелизма.This method is concurrency-safe.

void push(const T& _Src);

void push(T&& _Src);

ПараметрыParameters

_Src_Src
Элемент, добавляемый в очередь.The item to be added to the queue.

КомментарииRemarks

push является типобезопасным по отношению к вызовам методов push , try_pop и empty .push is concurrency-safe with respect to calls to the methods push, try_pop, and empty.

try_poptry_pop

Удаляет элемент из очереди, если он доступен.Dequeues an item from the queue if one is available. Этот метод является типобезопасным в режиме параллелизма.This method is concurrency-safe.

bool try_pop(T& _Dest);

ПараметрыParameters

_Dest_Dest
Ссылка на расположение для хранения элемента, находящихся в очереди.A reference to a location to store the dequeued item.

Возвращаемое значениеReturn Value

true значение, если элемент успешно удален из очереди; false в противном случае —.true if an item was successfully dequeued, false otherwise.

КомментарииRemarks

Если элемент был успешно удален из очереди, параметр _Dest получает значение из очереди, исходное значение, удерживаемое в очереди, уничтожается, а эта функция возвращает true .If an item was successfully dequeued, the parameter _Dest receives the dequeued value, the original value held in the queue is destroyed, and this function returns true. Если элемент для вывода из очереди отсутствует, эта функция возвращает значение false без блокировки, а содержимое _Dest параметра не определено.If there was no item to dequeue, this function returns false without blocking, and the contents of the _Dest parameter are undefined.

try_pop является типобезопасным по отношению к вызовам методов push , try_pop и empty .try_pop is concurrency-safe with respect to calls to the methods push, try_pop, and empty.

unsafe_beginunsafe_begin

Возвращает итератор типа iterator или const_iterator в начало параллельной очереди.Returns an iterator of type iterator or const_iterator to the beginning of the concurrent queue. Этот метод не является типобезопасным в режиме параллелизма.This method is not concurrency-safe.

iterator unsafe_begin();

const_iterator unsafe_begin() const;

Возвращаемое значениеReturn Value

Итератор типа iterator или const_iterator на начало объекта параллельной очереди.An iterator of type iterator or const_iterator to the beginning of the concurrent queue object.

КомментарииRemarks

Итераторы для класса в concurrent_queue основном предназначены для отладки, так как они выполняются слишком долго, а итерация не является надежной в отношении других операций очереди.The iterators for the concurrent_queue class are primarily intended for debugging, as they are slow, and iteration is not concurrency-safe with respect to other queue operations.

unsafe_endunsafe_end

Возвращает итератор типа iterator или const_iterator в конец параллельной очереди.Returns an iterator of type iterator or const_iterator to the end of the concurrent queue. Этот метод не является типобезопасным в режиме параллелизма.This method is not concurrency-safe.

iterator unsafe_end();

const_iterator unsafe_end() const;

Возвращаемое значениеReturn Value

Итератор типа iterator или const_iterator до конца параллельной очереди.An iterator of type iterator or const_iterator to the end of the concurrent queue.

КомментарииRemarks

Итераторы для класса в concurrent_queue основном предназначены для отладки, так как они выполняются слишком долго, а итерация не является надежной в отношении других операций очереди.The iterators for the concurrent_queue class are primarily intended for debugging, as they are slow, and iteration is not concurrency-safe with respect to other queue operations.

unsafe_sizeunsafe_size

Возвращает количество элементов в очереди.Returns the number of items in the queue. Этот метод не является типобезопасным в режиме параллелизма.This method is not concurrency-safe.

size_type unsafe_size() const;

Возвращаемое значениеReturn Value

Размер параллельной очереди.The size of the concurrent queue.

КомментарииRemarks

unsafe_size не является типобезопасным и может давать неверные результаты, если вызывается параллельно с вызовами методов push , try_pop и empty .unsafe_size is not concurrency-safe and can produce incorrect results if called concurrently with calls to the methods push, try_pop, and empty.

См. также разделSee also

Пространство имен Concurrencyconcurrency Namespace