Пространство имен 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.
Класс cancellation_token_registration Класс cancellation_token_registration представляет уведомление обратного вызова из cancellation_token. При использовании метода register на cancellation_token для получения уведомления о времени выполнения отмены объект cancellation_token_registration возвращается как дескриптор для обратного вызова, чтобы вызывающий код мог запросить, чтобы определенный обратный вызов больше не выполнялся с помощью метода deregister.
Класс cancellation_token_source Класс cancellation_token_source представляет возможность отмены некоторой отменяемой операции.
Класс choice Блок обмена сообщениями choice — это блок с несколькими источниками и одной целью, который представляет взаимодействие потока управления с набором источников. Блок choice будет ожидать доступа к любому из нескольких источников для создания сообщения и распространит индекс источника, создавшего сообщение.
Класс combinable Объект 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 Не допускающий повторные входы мьютекс, который явно учитывает среду выполнения с параллелизмом.
Класс CurrentScheduler Представляет абстракцию для текущего планировщика, связанного с вызывающим контекстом.
Класс default_scheduler_exists Этот класс описывает исключение, возникающее при вызове метода Scheduler::SetDefaultSchedulerPolicy, когда планировщик по умолчанию уже существует в процессе.
Класс event Сбрасываемое вручную событие, которое явно учитывает среду выполнения с параллелизмом.
Класс 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 Блокировка чтения или записи на основе очередей с предпочтением записи только с локальным вращением. Блокировка предоставляет модулям записи доступ в порядке поступления и блокирует доступ модулей чтения при постоянной нагрузке модулей записи.
Класс ScheduleGroup Представляет абстракцию для группы расписаний. Группы расписаний организуют набор связанных работ, которые выигрывают от планирования в непосредственной близости друг от друга: во времени (путем выполнения другой задачи в той же группе перед перемещением в другую группу) или в пространстве (путем выполнения нескольких элементов в той же группе в том же узле NUMA или физическом сокете).
Класс Scheduler Представляет абстракцию для планировщика среды выполнения с параллелизмом.
Класс 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 Класс 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 для принудительной отмены текущей задачи. Он также создается методом get() задачи для отмененной задачи.
Класс task_completion_event Класс task_completion_event позволяет отложить выполнение задачи до выполнения условия или запустить задачу в ответ на внешнее событие.
Класс task_continuation_context Класс task_continuation_context позволяет указать место продолжения выполнения задачи. Это полезно только для использования этого класса из приложения UWP. Для приложений, отличных от среда выполнения Windows, контекст выполнения задачи продолжения задачи определяется средой выполнения и не настраивается.
Класс 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 Интерфейс абстракции планировщика, которому требуется, чтобы диспетчер ресурсов среды выполнения с параллелизмом передал ему потоки планировщика в пользовательском режиме (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.
ПланированиеProtocolType Используется политикой SchedulingProtocol для описания того, какой алгоритм планирования будет использоваться для планировщика. Дополнительные сведения о доступных политиках планировщика см. в разделе PolicyElementKey.
ПереключениеProxyState Используется для обозначения состояния прокси-потока, когда он выполняет совместное переключение контекста на другой прокси-поток.
task_group_status Описывает состояние выполнения объекта task_group или structured_task_group. Значение этого типа возвращается многочисленными методами, которые ожидают выполнения задач, запланированных для завершения группой задач.
WinRTInitializationType Используется политикой WinRTInitialization для описания того, будет ли среда выполнения Windows инициализирована в потоках планировщика для приложения, которое работает в операционных системах Windows с версии 8 или выше, и каким образом это будет выполняться. Дополнительные сведения о доступных политиках планировщика см. в разделе PolicyElementKey.

Функции

Имя Описание
Функция Alloc Выделяет блок памяти указанного размера из подраспределителя кэширования среды параллелизма.
Функция 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 Отключает трассировку в среде выполнения с параллелизмом. Эту функция не рекомендуется использовать, поскольку трассировка событий Windows по умолчанию не регистрируется.
Функция EnableTracing Включает трассировку в среде выполнения с параллелизмом. Эта функция не рекомендована к использованию, поскольку трассировка событий Windows теперь по умолчанию включена.
Бесплатная функция Освобождает блок памяти, ранее выделенный методом 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.
Функция получения Перегружен. Общая реализация получения, позволяющая контексту ожидать данные строго из одного источника и фильтровать значения, которые принимаются.
Функция run_with_cancellation_token Немедленно и синхронно выполняет объект функции в контексте заданного токена отмены.
Функция send Перегружен. Синхронная операции отправки, которая ожидает принятия или отклонения сообщения целевым объектом.
функция set_ambient_scheduler (среда выполнения параллелизма)
Функция set_task_execution_resources Перегружен. Ограничивает ресурсы выполнения, используемые внутренними рабочими потоками среды выполнения с параллелизмом, определенным набором сходства.

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

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

Операторы

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

Константы

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

Requirements

Заголовок: agent.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

См. также

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