Поделиться через


Класс concurrent_queue

Класс concurrent_queue представляет собой класс контейнера последовательности, обеспечивающий доступ к элементам в порядке поступления. Он позволяет использовать ограниченный набор параллельно-безопасных операций, таких как push и try_pop. Здесь указатели или итераторы всегда допустимы. Это не гарантия инициализации элементов или определенного порядка обхода.

Синтаксис

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

Параметры

T
Тип данных элементов, хранящихся в очереди.

_Топор
Тип, представляющий сохраненный объект распределителя, инкапсулирующий сведения о выделении и размещении памяти для этой параллельной очереди. Этот аргумент является необязательным, и значением по умолчанию является allocator<T>.

Участники

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

Имя Описание
allocator_type Тип, представляющий класс распределителя для параллельной очереди.
const_iterator Тип, представляющий непотокобезопасный const итератор по элементам в параллельной очереди.
const_reference Тип, предоставляющий ссылку на const элемент, хранящийся в параллельной очереди для чтения и выполнения const операций.
difference_type Тип, предоставляющий подписанное расстояние между двумя элементами в параллельной очереди.
iterator Тип, представляющий непотокобезопасный итератор по элементам в параллельной очереди.
reference Тип, предоставляющий ссылку на элемент, хранящийся в параллельной очереди.
size_type Тип, который подсчитывает количество элементов в параллельной очереди.
value_type Тип, представляющий тип данных, хранящийся в параллельной очереди.

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

Имя Описание
concurrent_queue Перегружен. Создает параллельную очередь.
Деструктор ~concurrent_queue Уничтожает параллельную очередь.

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

Имя Описание
пусто Очищает параллельную очередь, уничтожая все элементы, которые в настоящее время закребованы. Этот метод не является безопасным для параллелизма.
empty Проверяет, является ли одновременная очередь пустой в данный момент вызовом этого метода. Этот метод является безопасным для параллелизма.
get_allocator Возвращает копию распределителя, используемую для создания параллельной очереди. Этот метод является безопасным для параллелизма.
push Перегружен. Заквещает элемент в конце параллельной очереди. Этот метод является безопасным для параллелизма.
try_pop Удаляет элемент из очереди, если он доступен. Этот метод является безопасным для параллелизма.
unsafe_begin Перегружен. Возвращает итератор типа iterator или const_iterator в начало параллельной очереди. Этот метод не является безопасным для параллелизма.
unsafe_end Перегружен. Возвращает итератор типа iterator или const_iterator в конец параллельной очереди. Этот метод не является безопасным для параллелизма.
unsafe_size Возвращает количество элементов в очереди. Этот метод не является безопасным для параллелизма.

Замечания

Дополнительные сведения см. в разделе "Параллельные контейнеры и объекты".

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

concurrent_queue

Требования

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

Пространство имен: concurrency

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
Тип входного итератора, задающего диапазон значений.

_Аль
Класс распределителя для использования с данным объектом.

_OtherQ
Исходный объект concurrent_queue для копирования или перемещения элементов.

_Начинать
Положение первого элемента в диапазоне копируемых элементов.

_Конец
Положение первого элемента за пределами диапазона копируемых элементов.

Замечания

Все конструкторы хранят объект _Al распределителя и инициализировать очередь.

Первый конструктор задает пустую начальную очередь и явно указывает используемый тип распределителя.

Второй конструктор указывает копию параллельной очереди _OtherQ.

Третий конструктор задает перемещение параллельной очереди _OtherQ.

Четвертый конструктор задает значения, предоставленные диапазоном итератора [ _Begin, ). _End

~concurrent_queue

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

~concurrent_queue();

empty

Проверяет, является ли одновременная очередь пустой в данный момент вызовом этого метода. Этот метод является безопасным для параллелизма.

bool empty() const;

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

true Значение , если параллельная очередь была пуста в данный момент, false в противном случае.

Замечания

Хотя этот метод является параллелизмом в отношении вызовов методов push, try_popи empty, возвращаемое значение может быть неверным к тому времени, когда он проверяется вызывающим потоком.

get_allocator

Возвращает копию распределителя, используемую для создания параллельной очереди. Этот метод является безопасным для параллелизма.

allocator_type get_allocator() const;

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

Копия распределителя, используемая для создания параллельной очереди.

отправка

Заквещает элемент в конце параллельной очереди. Этот метод является безопасным для параллелизма.

void push(const T& _Src);

void push(T&& _Src);

Параметры

_Src
Элемент, добавляемый в очередь.

Замечания

push имеет значение concurrency-safe в отношении вызовов методов push, try_popи empty.

try_pop

Удаляет элемент из очереди, если он доступен. Этот метод является безопасным для параллелизма.

bool try_pop(T& _Dest);

Параметры

_Dest
Ссылка на расположение для хранения отложенного элемента.

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

true Значение , если элемент был успешно удален, false в противном случае.

Замечания

Если элемент был успешно удален, параметр _Dest получает отложенное значение, исходное значение, удерживаемое в очереди, уничтожается, и эта функция возвращается true. Если элемент не был удален, эта функция возвращается false без блокировки, а содержимое _Dest параметра не определено.

try_pop имеет значение concurrency-safe в отношении вызовов методов push, try_popи empty.

unsafe_begin

Возвращает итератор типа iterator или const_iterator в начало параллельной очереди. Этот метод не является безопасным для параллелизма.

iterator unsafe_begin();

const_iterator unsafe_begin() const;

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

Итератор типа iterator или const_iterator начала параллельного объекта очереди.

Замечания

Итераторы для класса в основном предназначены для concurrent_queue отладки, так как они медленные, и итерация не является безопасной параллелизмом в отношении других операций очереди.

unsafe_end

Возвращает итератор типа iterator или const_iterator в конец параллельной очереди. Этот метод не является безопасным для параллелизма.

iterator unsafe_end();

const_iterator unsafe_end() const;

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

Итератор типа iterator или const_iterator до конца параллельной очереди.

Замечания

Итераторы для класса в основном предназначены для concurrent_queue отладки, так как они медленные, и итерация не является безопасной параллелизмом в отношении других операций очереди.

unsafe_size

Возвращает количество элементов в очереди. Этот метод не является безопасным для параллелизма.

size_type unsafe_size() const;

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

Размер параллельной очереди.

Замечания

unsafe_size не является безопасным для параллелизма и может создавать неправильные результаты, если он вызывается одновременно с вызовами методов push, try_popи empty.

См. также

Пространство имен concurrency