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


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

Пространство имен Concurrency предоставляет классы и функции, предоставляющие доступ к среде выполнения с параллелизмом, которая является платформой параллельного программирования для C++. Дополнительные сведения см.в статье Concurrency Runtime (Среда выполнения с параллелизмом).

Синтаксис

namespace concurrency;

Участники

Определения типов

Имя Описание
runtime_object_identity Каждый экземпляр сообщения имеет идентификатор, который сопутствует ему при клонировании и передаче между компонентами обмена сообщениями. Он не может быть адресом объекта сообщения.
task_status Тип, который представляет конечное состояние задачи. Допустимые значения — completed и canceled.
TaskProc Простая абстракция для задачи, определенная как void (__cdecl * TaskProc)(void *). TaskProc вызывается для вызова тела задачи.
TaskProc_t Простая абстракция для задачи, определенная как void (__cdecl * TaskProc_t)(void *). TaskProc вызывается для вызова тела задачи.

Классы

Имя Описание
Класс affinity_partitioner Класс affinity_partitioner аналогичен классу static_partitioner, но он улучшает локальность кэша за счет выбора сопоставления поддиапазонов с рабочими потоками. Он может значительно повысить производительность, если цикл повторно выполняется в одном и том же наборе данных и данные помещаются в кэш. Обратите внимание, что один и тот же объект affinity_partitioner должен использоваться с последующими итерациями параллельного цикла, выполняемого в указанном наборе данных, чтобы воспользоваться преимуществом локальности данных.
Класс Agent Класс, предназначенный для использования в качестве базового класса для всех независимых агентов. Он используется для скрытия состояния от других агентов и взаимодействия посредством передачи сообщений.
Класс auto_partitioner Класс auto_partitioner представляет метод, который алгоритмы parallel_for, parallel_for_each и parallel_transform используют по умолчанию для разделения обрабатываемого диапазона. Этот метод секционирования использует кражу диапазона для балансировки нагрузки, а также отмену на каждой итерации.
Класс bad_target Этот класс описывает исключение, которое создается, если блок обмена сообщениями получает указатель на целевой объект, который неверен для выполняемой операции.
Класс call Блок обмена сообщениями call — это упорядоченный блок target_block с несколькими источниками, который вызывает заданную функцию при получении сообщения.
Класс cancellation_token Класс cancellation_token представляет возможность определить, получала ли некоторая операция запрос на отмену. Заданный токен можно связать с task_group, structured_task_group или task, чтобы обеспечить неявную отмену. Его также можно опрашивать на предмет отмены или зарегистрировать обратный вызов для той ситуации, когда отменяется связанный cancellation_token_source.
Класс CancellationTokenRegistration Класс cancellation_token_registration представляет собой уведомление обратного вызова из cancellation_token. При использовании метода register на cancellation_token для получения уведомления о том, когда происходит отмена, объект cancellation_token_registration возвращается как дескриптор обратного вызова, чтобы вызывающий код мог отменить выполнение конкретного обратного вызова с помощью метода deregister.
Класс cancellation_token_source Класс cancellation_token_source представляет возможность отмены некоторой отменяемой операции.
Класс Choice Блок обмена сообщениями choice — это блок с несколькими источниками и одной целью, который представляет взаимодействие потока управления с набором источников. Блок choice будет ожидать, пока один из нескольких источников создаст сообщение и передаст индекс источника, создавшего сообщение.
Комбинируемый класс Объект combinable<T> предназначен для предоставления приватных для потока копий данных, чтобы выполнять без блокировок локальные для потока подвычисления в параллельных алгоритмах. В конце выполнения параллельной операции подвычисления, частные для потока, можно объединить в конечный результат. Этот класс можно использовать вместо разделяемой переменной, что может улучшить производительность при большом числе конфликтов на эту переменную.
Класс concurrent_priority_queue Класс concurrent_priority_queue — это контейнер, который позволяет нескольким потокам параллельно помещать и извлекать элементы. Элементы извлекаются в порядке приоритета, где приоритет определяется функтором, предоставленным в качестве аргумента шаблона.
Класс concurrent_queue Класс concurrent_queue представляет собой контейнер типа последовательности, который позволяет доступ к элементам по принципу «первым вошел — первым вышел». Он позволяет использовать ограниченный набор параллельно-безопасных операций, таких как push и try_pop.
Класс concurrent_unordered_map Класс concurrent_unordered_map представляет собой безопасный в отношении параллелизма контейнер, управляющий последовательностью элементов типа std::pair<const K, _Element_type> переменной длины. Последовательность представлена таким образом, что позволяет параллельно-безопасно выполнять операции присоединения, получения доступа к элементу, доступа к итератору и обхода итератора.
Класс concurrent_unordered_multimap Класс concurrent_unordered_multimap представляет собой безопасный в отношении параллелизма контейнер, управляющий последовательностью элементов типа std::pair<const K, _Element_type> переменной длины. Последовательность представлена таким образом, которая позволяет безопасно при параллелизме выполнять операции добавления, доступа к элементу, доступа к итератору и обхода итератора.
Класс concurrent_unordered_multiset Класс concurrent_unordered_multiset — это контейнер, безопасный для параллельного выполнения, который управляет последовательностью элементов типа K с переменной длиной. Последовательность представлена таким образом, чтобы обеспечить безопасное добавление в условиях параллельного выполнения, доступ к элементам, доступ к итератору и его обходу.
Класс concurrent_unordered_set Класс concurrent_unordered_set — это контейнер, безопасный для параллельного выполнения, который управляет последовательностью элементов типа K с переменной длиной. Последовательность представлена таким образом, чтобы обеспечить безопасное для параллельного выполнения добавление, доступ к элементам, доступ к итератору и перемещение по итератору.
Класс concurrent_vector Класс concurrent_vector представляет собой класс контейнера последовательности, обеспечивающий доступ к элементам в случайном порядке. Позволяет конкурентно-безопасно выполнять операции добавления, доступа к элементам, доступа к итераторам и обхода итераторов.
Класс Context Представляет абстракцию для контекста выполнения.
Класс context_self_unblock Этот класс описывает исключение, которое создается при вызове метода Unblock объекта Context из того же контекста. Это означает попытку данного контекста разблокировать самого себя.
Класс context_unblock_unbalanced Данный класс описывает исключение, создаваемое, если вызовы методов Block и Unblock объекта Context объединены неправильно.
Класс critical_section Не реентерабельный мьютекс, который явно учитывает среду выполнения Concurrency Runtime.
Класс CurrentScheduler Представляет абстракцию для текущего планировщика, связанного с вызывающим контекстом.
Класс default_scheduler_exists Этот класс описывает исключение, возникающее при вызове метода Scheduler::SetDefaultSchedulerPolicy, когда планировщик по умолчанию уже существует в процессе.
Класс события Событие с ручным сбросом, которое явно учитывает Параллельную среду выполнения.
Класс improper_lock Этот класс описывает исключение, создаваемое, когда блокировка получена неправильно.
Класс improper_scheduler_attach Этот класс описывает исключение, которое создается при вызове метода Attach на объекте Scheduler, который уже присоединен к текущему контексту.
Класс improper_scheduler_detach Этот класс описывает исключение, создаваемое при вызове метода CurrentScheduler::Detach в контексте, который не присоединен ни к одному планировщику с помощью метода Attach объекта Scheduler.
Класс improper_scheduler_reference Данный класс описывает исключение, которое создается при вызове метода Reference на объекте Scheduler, который завершает работу, из контекста, который не является частью этого планировщика.
Класс invalid_link_target Данный класс описывает исключение, создаваемое, когда вызывается метод link_target блока обмена сообщениями и блок сообщений не может создать связь с целевым объектом. Это может быть результатом превышения числа ссылок, допустимых для блока сообщений, или попытки связать указанную цель с одним и тем же источником дважды.
Класс invalid_multiple_scheduling Этот класс описывает исключение, создаваемое, если объект task_handle запланирован несколько раз с помощью метода run объекта task_group или structured_task_group без промежуточных вызовов любого из методов wait или run_and_wait.
Класс invalid_operation Данный класс описывает исключение, возникающее при выполнении недопустимой операции, которая не описывается более точно другим типом исключения, создаваемым средой выполнения с параллелизмом.
Класс invalid_oversubscribe_operation Этот класс описывает исключение, создаваемое при вызове метода Context::Oversubscribe с параметром _BeginOversubscription, имеющим значение false, без предварительного вызова метода Context::Oversubscribe с параметром _BeginOversubscription, имеющим значение true.
Класс invalid_scheduler_policy_key Этот класс описывает исключение, создаваемое, когда конструктору объекта SchedulerPolicy передается неверный или неизвестный ключ или методу SetPolicyValue объекта SchedulerPolicy передается ключ, который должен быть изменен другими средствами, такими как метод SetConcurrencyLimits.
Класс invalid_scheduler_policy_thread_specification Данный класс описывает исключение, создаваемое при попытке установить ограничения параллельности объекта SchedulerPolicy таким образом, чтобы значение ключа MinConcurrency было меньше, чем значение ключа MaxConcurrency.
Класс invalid_scheduler_policy_value Этот класс описывает исключение, создаваемое, когда ключу политики объекта SchedulerPolicy присваивается недопустимое для этого ключа значение.
Класс ISource Класс ISource является интерфейсом для всех блоков источников. Блоки источников распространяют сообщения в блоки ITarget.
Класс ITarget Класс ITarget является интерфейсом для всех целевых блоков. Целевые блоки потребляют сообщения, предлагаемые им блоками ISource.
join-класс Блок обмена сообщениями join — это упорядоченный блок propagator_block с несколькими источниками и одной целью, который объединяет сообщения типа T от каждого из своих источников.
Класс location Абстракция физического расположения в аппаратном обеспечении.
Класс message Основной конверт сообщения, содержащий полезные данные, передаваемые между блоками обмена сообщениями.
Класс message_not_found Этот класс описывает исключение, создаваемое, когда блок обмена сообщениями не может найти запрошенное сообщение.
Класс message_processor Класс message_processor — это абстрактный базовый класс для обработки объектов message. Упорядочивание сообщений не гарантируется.
Класс missing_wait Этот класс описывает исключение, возникающее, когда задачи по-прежнему запланированы для объекта task_group или structured_task_group в момент выполнения деструктора этого объекта. Это исключение никогда не будет выброшено, если деструктор вызывается из-за завершения стека как результата исключения.
Класс multi_link_registry Объект multi_link_registry представляет собой network_link_registry, управляющий несколькими блоками источников или целевыми блоками.
Класс multitype_join Блок обмена сообщениями multitype_join — это блок с несколькими источниками и одной целью, который объединяет сообщения разных типов от каждого из своих источников и предлагает кортеж объединенных сообщений своему целевому объекту.
Класс nested_scheduler_missing_detach Этот класс описывает исключение, которое выбрасывается, когда среда выполнения с параллелизмом обнаруживает, что вы не вызвали метод CurrentScheduler::Detach для контекста, который был присоединен ко второму планировщику с помощью метода Attach объекта Scheduler.
Класс network_link_registry Абстрактный базовый класс network_link_registry управляет связями между блоками источников и целевыми блоками.
operation_timed_out класс Этот класс описывает исключение, создаваемое по истечении времени ожидания операции.
Класс ordered_message_processor ordered_message_processor представляет собой message_processor, который позволяет блокам обмена сообщениями обрабатывать сообщения в порядке их получения.
Класс overwrite_buffer Блок обмена сообщениями overwrite_buffer — это упорядоченный блок propagator_block с несколькими источниками и несколькими целями, который может хранить одно сообщение в один момент времени. Новые сообщения перезаписывают предыдущие.
Класс progress_reporter Класс формирования отчетов о ходе выполнения позволяет формировать уведомления о ходе выполнения определенного типа. Каждый объект progress_reporter привязан к конкретному асинхронному действию или операции.
Класс propagator_block Класс propagator_block — это абстрактный базовый класс для блоков сообщений, которые являются одновременно блоками источников и целевыми блоками. Он объединяет функциональные возможности обоих классов, source_block и target_block.
Класс reader_writer_lock Блокировка чтения или записи на основе очередей с предпочтением записи только с локальным вращением. Блокировка предоставляет писателям доступ по принципу "первым пришел - первым получил" (FIFO) и лишает доступа читателей при постоянной нагрузке писателей.
Класс ScheduleGroup Представляет абстракцию для группы графиков. Группы расписаний организуют набор связанных работ, которые выигрывают от планирования в непосредственной близости друг от друга: во времени (путем выполнения другой задачи в той же группе перед перемещением в другую группу) или в пространстве (путем выполнения нескольких элементов в той же группе в том же узле NUMA или физическом сокете).
Класс Scheduler Представляет абстракцию для планировщика Concurrency Runtime.
Класс scheduler_not_attached Этот класс описывает исключение, выбрасываемое, когда выполняется операция, требующая, чтобы планировщик был присоединен к текущему контексту, а его нет.
Класс scheduler_resource_allocation_error Этот класс описывает исключение, возникающее из-за сбоя получения критического ресурса в исполняющей среде с параллелизмом.
Класс scheduler_worker_creation_error Этот класс описывает исключение, которое создается из-за сбоя создания рабочего контекста выполнения в исполняющей среде с параллелизмом.
Класс SchedulerPolicy Класс SchedulerPolicy содержит набор пар «ключ — значение» по одной для каждого элемента политики, управляющего поведением экземпляра планировщика.
Класс simple_partitioner Класс simple_partitioner представляет статическое разделение диапазона, в котором итерации выполняются с помощью parallel_for. Разделитель делит диапазон на фрагменты таким образом, что каждый фрагмент имеет число итераций не менее указанного размера фрагмента.
Класс single_assignment Блок передачи сообщений single_assignment — это многопользовательский, многозадачный, упорядоченный блок propagator_block, способный хранить единственный объект message, который можно записать только один раз.
Класс single_link_registry Объект single_link_registry представляет собой network_link_registry, который управляет только одним блоком источника или одним целевым блоком.
source_block Class Класс source_block — это абстрактный базовый класс только для блоков источника. Класс предоставляет основные функции управления соединениями, а также проверки распространенных ошибок.
Класс source_link_manager Объект source_link_manager управляет сетевыми соединениями блоков обмена сообщениями с блоками ISource.
Класс static_partitioner Класс static_partitioner представляет статическое разделение диапазона, в котором итерации выполняются с помощью parallel_for. Секционатор делит диапазон на столько блоков, сколько рабочих ролей доступно базовому планировщику.
Класс structured_task_group Класс structured_task_group представляет коллекцию параллельной работы со сложной структурой. Можно поместить в очередь structured_task_group отдельные параллельные задачи с помощью объектов task_handle и ожидать их выполнения или отменить группу задач до завершения выполнения, что приведет к отмене всех задач, которые не начали выполнение.
Класс target_block Класс target_block — это абстрактный базовый класс, который предоставляет основные функции управления соединениями и проверку ошибок только для целевых блоков.
Класс task (среда выполнения с параллелизмом) Класс task библиотеки параллельных шаблонов (PPL). Объект task представляет работу, которая может быть выполнена асинхронно и параллельно с другими задачами и параллельной работой, созданной параллельными алгоритмами в среде выполнения с параллелизмом. При успешном завершении он выводи результат типа _ResultType. Задачи типа task<void> никакого результата не дают. Задачи можно приостанавливать и отменять независимо от других задач. Также возможно сочетание с другими задачами с помощью шаблонов продолжений (then), присоединений (when_all) и выбора (when_any).
Класс task_canceled (Задача_отменена) Этот класс описывает исключение, которое создается уровнем задач PPL для принудительной отмены текущей задачи. Он также выбрасывается методом задачей для отмененной задачи.
Класс task_completion_event Класс task_completion_event позволяет отложить выполнение задачи до выполнения условия или запустить задачу в ответ на внешнее событие.
Класс task_continuation_context Класс task_continuation_context позволяет указать место продолжения выполнения задачи. Этот класс полезно использовать только в приложениях UWP. Для приложений, не являющихся приложениями Windows Runtime, контекст выполнения продолжения задачи определяется средой выполнения и не подлежит настройке.
Класс task_group Класс task_group представляет коллекцию параллельных задач, которые можно ожидать или отменить.
Класс task_handle Класс task_handle представляет отдельный параллельный рабочий элемент. Он инкапсулирует инструкции и данные, необходимые для выполнения части работы.
Класс task_options (Среда выполнения параллельных вычислений) Представляет допустимые параметры для создания задачи
Класс timer Блок обмена сообщениями timer — это блок source_block с одной целью, который может отправлять сообщение своей цели по истечении указанного периода времени или через заданные интервалы времени.
Класс Transformer Блок обмена сообщениями transformer — это упорядоченный блок propagator_block с одной целью и несколькими источниками, который может принимать сообщения одного типа и хранить неограниченное число сообщений другого типа.
Класс unbounded_buffer Блок обмена сообщениями unbounded_buffer — это упорядоченный блок propagator_block с несколькими целями и несколькими источниками, который может хранить неограниченное число сообщений.
Класс unsupported_os Данный класс описывает исключение, которое создается при использовании неподдерживаемой операционной системы.

Структуры

Имя Описание
Структура DispatchState Структура DispatchState используется для передачи состояния в метод IExecutionContext::Dispatch. Она описывает обстоятельства, при которых метод Dispatch вызывается для интерфейса IExecutionContext.
Структура IExecutionContext Интерфейс для контекста выполнения, который может выполняться на данном виртуальном процессоре и к которому может применяться совместное переключение контекста.
Структура IExecutionResource Абстракция для потока выполнения на аппаратном уровне.
Структура IResourceManager Интерфейс для диспетчера ресурсов среды параллельных вычислений. Это интерфейс, по которому планировщики взаимодействуют с диспетчером ресурсов.
Структура IScheduler Интерфейс для абстракции планировщика работы. Диспетчер ресурсов среды выполнения с параллелизмом использует этот интерфейс для взаимодействия с планировщиками работы.
Структура ISchedulerProxy Интерфейс, по которому планировщики взаимодействуют с диспетчером ресурсов среды выполнения с параллелизмом для согласования выделения ресурсов.
Структура IThreadProxy Абстракция для потока выполнения. В зависимости от SchedulerType ключа политики, созданного вами планировщика, диспетчер ресурсов предоставит прокси, поддерживаемый либо обычным потоком Win32, либо потоком, планируемым на уровне пользовательского режима (UMS). Потоки UMS поддерживаются в 64-разрядных операционных системах Windows 7 и более поздних версий.
Структура ITopologyExecutionResource Интерфейс к ресурсу выполнения процессов, как это определено диспетчером ресурсов.
Структура ITopologyNode Интерфейс к узлу топологии, определяемый менеджером ресурсов. Узел содержит один или несколько ресурсов выполнения.
Структура IUMSCompletionList Представляет список выполнения UMS. Когда поток UMS блокируется, отправляется назначенный планировщиком контекст планирования для принятия решения о том, что нужно запланировать для корня базового виртуального процессора, пока исходный поток заблокирован. Когда снимается блокировка исходного потока, операционная система ставит его в очередь списка выполнения, который доступен через этот интерфейс. Планировщик может запросить список выполнения в назначенном контексте планирования или в любом другом месте, где он ищет работу.
Структура IUMSScheduler Интерфейс для абстракции планировщика заданий, который хочет, чтобы диспетчер ресурсов среды выполнения Concurrency Runtime предоставил ему пользовательские потоки, подлежащие планированию (UMS). Диспетчер ресурсов использует этот интерфейс для взаимодействия с планировщиками потоков UMS. Интерфейс IUMSScheduler наследует от интерфейса IScheduler .
Структура IUMSThreadProxy Абстракция для потока выполнения. Если вы хотите, чтобы вашему планировщику были предоставлены потоки, доступные для планирования в режиме пользователя (UMS), установите значение элемента политики планировщика SchedulerKind на UmsThreadDefault и реализуйте интерфейс IUMSScheduler. Потоки UMS поддерживаются только в 64-разрядных операционных системах Windows 7 и более поздних версий.
Структура IUMSUnblockNotification Представляет уведомление диспетчера ресурсов о том, что прокси-поток, который был заблокирован и спровоцировал возврат к заданной среде планирования планировщика, был разблокирован и готов к планированию. Этот интерфейс становится недействительным, как только связанный с прокси-потоком контекст выполнения, возвращенный из метода GetContext, перепланируется.
Структура IVirtualProcessorRoot Абстракция для аппаратного потока, на котором может выполняться поток-прокси.
Структура scheduler_interface Интерфейс планировщика
Структура scheduler_ptr (среда выполнения с параллелизмом) Представляет указатель для планировщика. Этот класс существует, чтобы позволить указание общего срока существования с помощью shared_ptr или обычной ссылки, используя необработанный указатель.

Перечисления

Имя Описание
agent_status Допустимые состояния для объекта agent.
Agents_EventType Типы событий, которые можно отслеживать с помощью функции трассировки, предоставляемой библиотекой агентов.
ConcRT_EventType Типы событий, которые можно отслеживать с помощью функций трассировки, обеспечиваемых средой выполнения с параллелизмом.
Concrt_TraceFlags Флаги трассировки для типов событий
CriticalRegionType Тип критической области, внутри которой находится контекст.
DynamicProgressFeedbackType Используется политикой DynamicProgressFeedback для описания того, будет ли к ресурсам планировщика применена повторная балансировка в соответствии со статистическими данными, полученными из планировщика, или только на основе перехода виртуальных процессоров в состояние бездействия и из него через вызовы методов Activate и Deactivate для интерфейса IVirtualProcessorRoot. Дополнительные сведения о доступных политиках планировщика см. в разделе PolicyElementKey.
join_type Тип блока обмена сообщениями join.
message_status Допустимые ответы на предложение объекта message блоку.
PolicyElementKey Ключи политики, описывающие аспекты поведения планировщика. Каждый элемент политики описан с помощью пары «ключ — значение». Для получения дополнительной информации о политиках планировщика и их влиянии на планировщики, см. Планировщик задач.
SchedulerType Используется политикой SchedulerKind для описания типа потоков, которые должен использовать планировщик для базовых контекстов выполнения. Дополнительные сведения о доступных политиках планировщика см. в разделе PolicyElementKey.
SchedulingProtocolType Используется политикой SchedulingProtocol для описания того, какой алгоритм планирования будет использоваться для планировщика. Дополнительные сведения о доступных политиках планировщика см. в разделе PolicyElementKey.
Переключение состояния прокси Используется для обозначения состояния прокси-потока, когда он выполняет совместное переключение контекста на другой прокси-поток.
статус группы задач Описывает состояние выполнения объекта task_group или structured_task_group. Значение этого типа возвращается многочисленными методами, которые ожидают завершения задач, запланированных на выполнение в группе задач.
WinRTInitializationType Используется политикой WinRTInitialization для описания того, будет ли среда выполнения Windows инициализирована в потоках планировщика для приложения, которое работает в операционных системах Windows с версии 8 или выше, и каким образом это будет выполняться. Дополнительные сведения о доступных политиках планировщика см. в разделе PolicyElementKey.

Функции

Имя Описание
Функция Alloc Выделяет блок памяти указанного размера из субраспределителя кэширования Concurrency Runtime.
Функция asend Перегружен. Асинхронная операция отправки, которая назначает задачу для передачи данных в целевой блок.
Функция cancel_current_task Отменяет выполняющуюся в данный момент задачу. Эту функцию можно вызывать из тела задачи, чтобы прервать выполнение задачи и перевести ее в состояние canceled.

Вызов этой функции является неподдерживаемым сценарием, если вы не находитесь в теле task. Это приведет к неопределенному поведению, например, сбою или неотзывчивости в вашем приложении.
Функция create_async Создает асинхронную конструкцию среды выполнения Windows на основе предоставленного пользователем лямбда-выражения или объекта функции. Тип возвращаемого значения create_async — один из следующих: IAsyncAction^, IAsyncActionWithProgress<TProgress>^, IAsyncOperation<TResult>^ или IAsyncOperationWithProgress<TResult, TProgress>^, в зависимости от сигнатуры лямбда-выражения, переданного методу.
Функция create_task Перегружен. Создает объект задачи PPL. Функция create_task может использоваться в любой ситуации, где бы вы использовали конструктор задач. Она предоставлена главным образом для удобства, поскольку позволяет использовать ключевое слово auto при создании задач.
Функция CreateResourceManager Возвращает интерфейс, который представляет одноэлементный экземпляр диспетчера ресурсов среды выполнения с параллелизмом. Диспетчер ресурсов отвечает за назначение ресурсов планировщикам, которым требуется взаимодействовать друг с другом.
Функция DisableTracing Отключает трассировку в среде Concurrency Runtime. Эта функция не рекомендуется использовать, поскольку ETW трассировка по умолчанию не зарегистрирована.
Функция EnableTracing Включает трассировку в среде выполнения с параллелизмом. Эта функция устарела, поскольку трассировка событий ETW теперь включена по умолчанию.
Бесплатная функция Освобождает блок памяти, ранее выделенный методом Alloc для кеширующего подраспределителя среды параллельного выполнения.
Функция get_ambient_scheduler (планировщик параллельных вычислений)
Функция GetExecutionContextId Возвращает уникальный идентификатор, который можно назначить контексту выполнения, реализующему интерфейс IExecutionContext.
Функция GetOSVersion Возвращает версию операционной системы.
Функция GetProcessorCount Возвращает число аппаратных потоков базовой системы.
Функция GetProcessorNodeCount Возвращает число узлов NUMA или пакетов процессора в базовой системе.
Функция GetSchedulerId Возвращает уникальный идентификатор, который можно назначить планировщику, реализующему интерфейс IScheduler.
Функция interruption_point Создает точку отмены процесса. Если отмена выполняется в контексте вызова этой функции, это выбрасывает внутреннее исключение, которое прерывает текущую выполняемую параллельную работу. Если отмена не выполняется, функция ничего не делает.
Функция is_current_task_group_canceling Возвращает значение, указывающее, находится ли группа задач, которая в данный момент выполняется встроенным образом в текущем контексте, в процессе активной отмены (или вскоре перейдет в это состояние). Обратите внимание, что если в текущем контексте нет групп задач, выполняющихся в режиме встроенного выполнения, будет возвращено значение false.
Функция make_choice Перегружен. Конструирует блок сообщений choice из необязательного объекта Scheduler или ScheduleGroup и двух или более источников входных данных.
Функция make_greedy_join Перегружен. Конструирует блок сообщений greedy multitype_join из необязательного объекта Scheduler или ScheduleGroup и двух или более источников входных данных.
Функция make_join Перегружен. Конструирует блок сообщений non_greedy multitype_join из необязательного объекта Scheduler или ScheduleGroup и двух или более источников входных данных.
Функция make_task Фабричный метод для создания объекта task_handle.
Функция parallel_buffered_sort Перегружен. Упорядочивает элементы в указанном диапазоне в неубывающем порядке или в соответствии с критерием упорядочивания, заданным двоичным предикатом, параллельно. Эта функция семантически схожа с std::sort: она выполняет нестабильную сортировку на месте, основанную на сравнении, но требует дополнительного пространства O(n) и инициализации элементов по умолчанию.
Функция parallel_for Перегружен. parallel_for выполняет итерацию по диапазону индексов и выполняет предоставленную пользователем функцию в каждой итерации параллельно.
Функция parallel_for_each Перегружен. parallel_for_each применяет указанную функцию к каждому элементу в диапазоне параллельно. Эта функция семантически эквивалентна функции for_each в пространстве имен std, за исключением того, что итерация по элементам выполняется параллельно и порядок итерации не определен. Аргумент _Func должен поддерживать оператор вызова функции формы operator()(T), где параметр T является типом элемента контейнера, для которого выполняется итерация.
Функция parallel_invoke Перегружен. Выполняет объекты функции, предоставленные в виде параметров, в параллельном режиме и блокирует их до завершения выполнения. Каждый объект функции может быть лямбда-выражением, указателем на функцию или любым объектом, который поддерживает оператор вызова функции с подписью void operator()().
Функция parallel_radixsort Перегружен. Располагает элементы в указанном диапазоне в неубывающем порядке, используя поразрядную сортировку. Это стабильная функция сортировки, для которой требуется функция проекции, способная проецировать сортируемые элементы в неподписанные ключи целочисленного типа. Для сортируемых элементов требуется инициализация по умолчанию.
Функция parallel_reduce Перегружен. Параллельно вычисляет сумму всех элементов в указанном диапазоне путем вычисления последовательных частичных сумм или вычисляет результаты последовательных частичных сумм, полученных сходным образом с использованием указанной бинарной операции, отличной от суммирования. parallel_reduce семантически аналогичен std::accumulate, но требует, чтобы бинарная операция была ассоциативна, а также значение идентификатора вместо начального значения.
Функция parallel_sort Перегружен. Упорядочивает элементы в указанном диапазоне параллельно в порядке неубывания или согласно критерию сортировки, определенному двоичным предикатом. Эта функция семантически схожа с std::sort, так как она основана на сравнении, неустойчива, сортирует на месте.
Функция parallel_transform Перегружен. Применяет заданный объект функции к каждому элементу в исходном диапазоне или к паре элементов из двух исходных диапазонов и параллельно копирует возвращаемые значения объекта функции в диапазон назначения. Эта функция семантически эквивалентна std::transform.
Функция receive Перегружен. Общая реализация получения, позволяющая контексту ожидать данные строго из одного источника и фильтровать значения, которые принимаются.
Функция run_with_cancellation_token Немедленно и синхронно выполняет объект функции в контексте заданного токена отмены.
Функция send Перегружен. Синхронная операция отправки, которая ожидает принятия или отклонения сообщения получателем.
Функция set_ambient_scheduler (Concurrency Runtime)
Функция set_task_execution_resources Перегружен. Ограничивает ресурсы выполнения, используемые внутренними рабочими потоками Среды параллельных вычислений, до определенного набора привязанностей.

Этот метод можно вызывать только до создания диспетчера ресурсов или между двумя периодами существования диспетчера ресурсов. Его можно вызывать многократно, если на момент вызова диспетчер ресурсов отсутствует. После задания ограничения сходства оно остаётся в силе до следующего допустимого вызова метода set_task_execution_resources.

Предоставленная маска привязки не должна обязательно быть подмножеством маски привязки процесса. Аффинность процессов будет обновлена при необходимости.
Функция swap Обменивает элементы двух объектов concurrent_vector.
функция task_from_exception (Concurrency Runtime)
функция task_from_result (Concurrency Runtime)
Функция Trace_agents_register_name Связывает данное имя с блоком сообщений или агентом в трассировке событий Windows (ETW).
Функция try_receive Перегружен. Общая реализация проверки-получения, позволяющая контексту выполнять поиск данных строго из одного источника и фильтровать значения, которые принимаются. Если данные не готовы, метод вернет значение False.
Функция ожидания Приостанавливает текущий контекст на указанный период времени.
Функция when_all Создает задачу, которая завершается успешно, если все задачи, предоставленные в качестве аргументов, завершаются успешно.
Функция when_any Перегружен. Создает задачу, которая завершается успешно, если любая из задач, предоставленных в качестве аргументов, завершается успешно.

Операторы

Имя Описание
оператор!= Проверяет, не равен ли объект concurrent_vector слева от оператора объекту concurrent_vector справа от оператора.
оператор&> Перегружен. Создает задачу, которая успешно завершится, когда обе задачи, предоставленные в качестве аргументов, успешно завершены.
operator|| Перегружен. Создает задачу, которая завершается успешно, если любая из задач, предоставленных в качестве аргументов, завершается успешно.
оператор< Проверяет, меньше ли объект concurrent_vector слева от оператора, чем объект concurrent_vector справа от оператора.
operator<= Проверяет, меньше ли объект concurrent_vector слева от оператора, чем объект concurrent_vector справа от оператора, или равен ему.
operator== Проверяет равенство объекта concurrent_vector слева от оператора объекту concurrent_vector справа от оператора.
оператор> Проверяет больше ли объект concurrent_vector слева от оператора, чем объект concurrent_vector справа от оператора.
operator>= Проверяет, является ли объект concurrent_vector, расположенный слева от оператора, больше или равен объекту concurrent_vector, находящемуся справа.

Константы

Имя Описание
AgentEventGuid GUID категории ({B9B5B78C-0713-4898-A21A-C67949DCED07}), описывающий события ETW, испускаемые библиотекой Agentes в среде выполнения параллелизма.
ChoreEventGuid GUID категории, описывающий события ETW, инициированные Библиотекой параллельных вычислений и непосредственно связанные с задачами или подзадачами.
ConcRT_ProviderGuid GUID предоставителя ETW для параллельной среды выполнения.
CONCRT_RM_VERSION_1 Указывает на поддержку интерфейса диспетчера ресурсов, определенного в Visual Studio 2010.
ConcRTEventGuid GUID категории, описывающий события ETW, инициированные Concurrency Runtime и не детализированные другой категорией.
ContextEventGuid GUID категории, описывающий события ETW, инициированные средой выполнения Concurrency Runtime, которые непосредственно связаны с контекстами.
COOPERATIVE_TIMEOUT_INFINITE Значение, указывающее, что время ожидания никогда не должно истечь.
COOPERATIVE_WAIT_TIMEOUT Значение, указывающее, что время ожидания истекло.
INHERIT_THREAD_PRIORITY Специальное значение для ключа политики ContextPriority, указывающее, что приоритет потока всех контекстов в планировщике должен быть таким же, как приоритет потока, создавшего планировщик.
LockEventGuid GUID категории, описывающий события ETW, инициированные параллельной средой выполнения, которые непосредственно связаны с блокировками.
MaxExecutionResources Специальное значение для ключей политики MinConcurrency и MaxConcurrency. По умолчанию соответствует числу аппаратных потоков на компьютере при отсутствии других ограничений.
PPLParallelForeachEventGuid GUID категории, описывающий ETW события, инициированные Concurrency Runtime, которые непосредственно связаны с использованием функции parallel_for_each.
PPLParallelForEventGuid GUID категории, описывающий ETW события, инициированные Concurrency Runtime, которые непосредственно связаны с использованием функции parallel_for.
PPLParallelInvokeEventGuid GUID категории, описывающий ETW события, инициированные Concurrency Runtime, которые непосредственно связаны с использованием функции parallel_invoke.
ResourceManagerEventGuid GUID категории, описывающий события ETW (трассировки событий Windows), инициируемые Concurrency Runtime, которые непосредственно связаны с диспетчером ресурсов.
ScheduleGroupEventGuid GUID категории, описывающий события ETW, инициированные Concurrency Runtime и непосредственно связанные с группами расписаний.
SchedulerEventGuid GUID категории, описывающий события ETW, инициированные средой выполнения Concurrency Runtime, которые непосредственно связаны с действиями планировщика.
VirtualProcessorEventGuid GUID категории, описывающий события ETW, генерированные Средой выполнения Concurrency, которые непосредственно связаны с виртуальными процессорами.

Требования

Заголовок: agents.h, concrt.h, concrtrm.h, concurrent_priority_queue.h, concurrent_queue.h, concurrent_unordered_map.h, concurrent_unordered_set.h, concurrent_vector.h, internal_concurrent_hash.h, internal_split_ordered_list.h, ppl.h, pplcancellation_token.h, pplconcrt.h, pplinterface.h, ppltasks.h

См. также

Справочные материалы