Класс 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
.