Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс concurrent_queue представляет собой контейнер типа последовательности, который позволяет доступ к элементам по принципу «первым вошел — первым вышел». Он позволяет использовать ограниченный набор параллельно-безопасных операций, таких как push и try_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 | Уничтожает параллельную очередь. |
Открытые методы
| Имя | Описание |
|---|---|
| очистить | Очищает конкурентную очередь, уничтожая любые элементы, поставленные в очередь в настоящее время. Этот метод не является безопасным для параллелизма. |
| empty | Проверяет, пуста ли конкурентная очередь в момент вызова этого метода. Этот метод является безопасным для параллелизма. |
| get_allocator | Возвращает копию аллокатора, используемого для создания параллельной очереди. Этот метод является безопасным для параллелизма. |
| push | Перегружен. Добавляет элемент в хвост параллельной очереди. Этот метод является безопасным для параллелизма. |
| try_pop | Удаляет элемент из очереди, если он доступен. Этот метод является безопасным для параллелизма. |
| небезопасное_начало | Перегружен. Возвращает итератор типа iterator или const_iterator в начало параллельной очереди. Этот метод не является безопасным для параллелизма. |
| unsafe_end | Перегружен. Возвращает итератор типа iterator или const_iterator в конец параллельной очереди. Этот метод не является безопасным для параллелизма. |
| unsafe_size | Возвращает количество элементов в очереди. Этот метод не является безопасным для параллелизма. |
Замечания
Дополнительные сведения см. в разделе "Параллельные контейнеры и объекты".
Иерархия наследования
concurrent_queue
Требования
Заголовок: concurrent_queue.h
Пространство имен: конкурентность
очистить
Очищает конкурентную очередь, уничтожая любые элементы, поставленные в очередь в настоящее время. Этот метод не является безопасным для параллелизма.
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();
пусто
Проверяет, пуста ли конкурентная очередь в момент вызова этого метода. Этот метод является безопасным для параллелизма.
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 является потокобезопасным с точки зрения вызовов методов push, try_pop, и empty.
try_pop
Удаляет элемент из очереди, если он доступен. Этот метод является безопасным для параллелизма.
bool try_pop(T& _Dest);
Параметры
_Dest
Ссылка на расположение для хранения отложенного элемента.
Возвращаемое значение
true значение, если элемент был успешно извлечён из очереди, false в противном случае.
Замечания
Если элемент был успешно удален, параметр _Dest получает извлеченное значение, исходное значение в очереди уничтожается, и эта функция возвращает true. Если элемент не был удален, эта функция возвращается false без блокировки, а содержимое _Dest параметра не определено.
try_pop является безопасным при одновременном выполнении вызовов методов push, try_pop и empty.
unsafe_begin
Возвращает итератор типа iterator или const_iterator в начало параллельной очереди. Этот метод не является безопасным для параллелизма.
iterator unsafe_begin();
const_iterator unsafe_begin() const;
Возвращаемое значение
Итератор типа iterator или const_iterator, указывающий на начало объекта параллельной очереди.
Замечания
Итераторы класса concurrent_queue в основном предназначены для отладки, так как они медленные, и итерация не является потокобезопасной по отношению к другим операциям с очередью.
небезопасный_конец
Возвращает итератор типа iterator или const_iterator в конец параллельной очереди. Этот метод не является безопасным для параллелизма.
iterator unsafe_end();
const_iterator unsafe_end() const;
Возвращаемое значение
Итератор типа iterator или const_iterator до конца параллельной очереди.
Замечания
Итераторы для класса concurrent_queue в основном предназначены для отладки, так как они медленные, а итерация не является безопасной при параллельном выполнении по отношению к другим операциям очереди.
небезопасный_размер
Возвращает количество элементов в очереди. Этот метод не является безопасным для параллелизма.
size_type unsafe_size() const;
Возвращаемое значение
Размер параллельной очереди.
Замечания
unsafe_size не является безопасным для параллелизма и может создавать неправильные результаты, если он вызывается одновременно с вызовами методов push, try_popи empty.