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

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

namespace Concurrency;

Члены

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

Имя

Описание

runtime_object_identity

Каждый экземпляр сообщения имеет идентификацию, которая сопутствует ему по мере клонирования и передачи между компонентами обмена сообщениями. Это не может быть адрес объекта сообщения.

TaskProc

Элементарная абстракция для задачи, определенная как void (__cdecl * TaskProc)(void *). TaskProc вызывается для вызова основного текста задачи.

Классы

Имя

Описание

Класс agent

Класс предназначен для использования как базовый класс для всех независимых агентов. Используется для скрытия состояние от других агентов и взаимодействия через передачи сообщений.

Класс bad_target

Данный класс описывает исключение, которое выдается каждый раз, когда блок обмена сообщениями получает указатель на целевой объект, который неверен для выполняемой операции.

Класс call

Блок обмена сообщениями call — многоисточниковый, упорядоченный target_block, который вызывает заданную функцию при приеме сообщения.

Класс choice

Блок сообщений choice — многоисточниковый одноцелевой блок, который представляет взаимодействие потока управления с набором источников. Блок выбора будет ожидать любой из нескольких источников для создания сообщения и распространит индекс источника, создавшего сообщение.

Класс combinable

Объект combinable<T> предназначен для предоставления потокозакрытых копий данных для выполнения свободных от блокировок потоколокальных подвычислений в процессе параллельных алгоритмов. В конце параллельной операции потокозакрытые подвыражения могут быть объединены в окончательный результат. Этот класс может использоваться вместо общей переменной и может привести к улучшение производительности, если бы иначе на общей переменной была сильная конкуренция.

Класс concurrent_queue

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

Класс 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, который сочетает сообщения типа _Type от каждого из своих источников.

Класс 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, способный хранить одно сообщение за раз. Новые сообщения перезаписывают предыдущие.

Класс propagator_block

Класс propagator_block является абстрактным базовым классом для блоков сообщений, которые одновременно исходные и целевые. Объединяет функциональные возможности обоих классов source_block и target_block.

Класс reader_writer_lock

Блокировка чтения-записи на основе очереди с предпочтением записи со строго локальной циклической работой. Блокировка предоставляет доступ "первым вошел — первым вышел" для писателей и исключает доступ читателей под постоянной нагрузкой со стороны писателей.

Класс ScheduleGroup

Представляет абстракцию группы расписания. Группы расписаний организуют набор связанных работ, которые дают преимущества планирования вблизи друг от друга, выполняя другую задачу в той же группе перед перемещением другую группу или пространственно, выполняя несколько элементов в пределах одной и той же группы на одном узле NUMA или физическом сокете.

Класс Scheduler

Представляет абстракцию для планировщика среды параллелизма.

Класс scheduler_not_attached

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

Класс scheduler_resource_allocation_error

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

Класс SchedulerPolicy

Класс SchedulerPolicy содержит набор пар "ключ—значение", одна для каждого элемента политики, контролирующего поведение экземпляра планировщика.

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

Класс structured_task_group

Класс structured_task_group представляет высокоструктурированную коллекцию параллельной работы. Отдельные параллельные задачи можно ставить в очередь structured_task_group с помощью объектов task_handle и дождаться их завершения или отменить группу задач до завершения их выполнения, что прервет все задачи, которые не начали выполнение.

Класс target_block

Класс target_block является абстрактным базовым классом, который предоставляет основные функции управления ссылками и проверку ошибок для блоков, являющихся только целевыми.

Класс task_group

Класс task_group представляет коллекцию параллельные работы которые могут подождать или быть отменена.

Класс task_handle

Класс task_handle представляет отдельный параллельный рабочий элемент. Он инкапсулирует инструкции и данные, необходимые для выполнения части работы.

Класс timer

Блок сообщений timer — это одноцелевой source_block, способный отправлять сообщение цели по истечении указанного периода времени или через определенные интервалы.

Класс transformer

Блок сообщений transformer — одноцелевой многоисточниковый упорядоченный propagator_block, который может принимать сообщения одного типа и способен хранить неограниченное число сообщений другого типа.

Класс unbounded_buffer

Блок сообщений unbounded_buffer — многоцелевой, многоисточниковый, упорядоченный propagator_block, способный хранить неограниченное число сообщений.

Класс unsupported_os

Данный класс описывает исключение, которое создается всякий раз, когда используется неподдерживаемая операционная система. Среда параллелизма не поддерживает версии операционных систем до Windows XP с пакетом обновления 3 (SP3).

Структуры

Имя

Описание

Структура DispatchState

Структура DispatchState используется для передачи состояния методу IExecutionContext::Dispatch. Он описывает обстоятельства, под которыми вызывается метод Dispatch на интерфейсе IExecutionContext.

Структура IExecutionContext

Интерфейс для контекста выполнения, которые можно запускать на данный виртуальный процессор и доступный для совместного переключения контекста.

Структура IExecutionResource

Абстракция для аппаратного потока.

Структура IResourceManager

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

Структура IScheduler

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

Структура ISchedulerProxy

Интерфейс, по которому планировщики взаимодействуют со средой параллелизма диспетчера ресурсов для согласования выделения ресурсов.

Структура IThreadProxy

Абстракция для потока выполнения. В зависимости от создаваемого ключа политики SchedulerType планировщика, диспетчер ресурсов будет предоставить прокси-поток, который основывается на регулярном потоке Win32 или потоком, планируемым в режиме пользователя (UMS). UMS потоки являются поддерживаемыми в 64-разрядных операционных системах, начиная с Windows 7 и выше.

Структура IUMSCompletionList

Представляет список завершения UMS. Когда UMS поток блокируется, назначенный контекст планирования планировщика запускается для принятия решения, что запланировать на базовый корень виртуального процессора, пока исходный поток заблокирован. Когда разблокируется исходный поток, операционная система ставит его в очередь списка завершения, которое доступен через этот интерфейс. Планировщик может запросить список завершения на назначенный планирования контекст или любое другое место, в котором он ищет работу.

Структура IUMSScheduler

Интерфейс к абстракции планировщика работы, который хочет, чтобы диспетчер ресурсов среда параллелизма передал ему планируемые пользовательским режимом потоки (UMS). Диспетчер ресурсов использует этот интерфейс для связи с планировщиками UMS-потоков. Интерфейс IUMSScheduler наследует от интерфейса IScheduler.

Структура IUMSThreadProxy

Абстракция для потока выполнения. Если требуется, чтобы планировщик предоставлять запланированные пользовательского режимом потоков (UMS), задайте значение для элемента политики планировщика SchedulerKind как UmsThreadDefault и реализуйте интерфейс IUMSScheduler. UMS потоки являются только поддерживаемыми в 64-разрядных операционных системах, начиная с Windows 7 и выше.

Структура IUMSUnblockNotification

Представляет уведомление от диспетчера ресурсов, что прокси поток, который заблокирован и запустил возврат к назначенному планирования контексту планировщика, разблокирован и готов для планирования. Этот интерфейс является недопустимым после перепланирования связанного контекста выполнения прокси-потока, возвращенного из метода GetContext.

Структура IVirtualProcessorRoot

Абстракция для аппаратного потока, на котором может выполняться прокси-поток.

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

Имя

Описание

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

Допустимые состояния для agent.

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

Типы событий, которые могут быть отслежены при использовании возможности трассировки, предоставляемой средой параллелизма.

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

Тип критической области, в которой контекст находится.

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

Используется политикой DynamicProgressFeedback для описания, будет ли быть перебалансированы ресурсы для планировщика согласно статистическим сведениям, собранным из планировщика или только на основе виртуальных процессоров, переходящих из и в состояния простоя через вызовы методов Activate и Deactivate на интерфейсе IVirtualProcessorRoot. Дополнительные сведения о доступных политиках планировщиков см. в разделе Перечисление PolicyElementKey.

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

Тип блока сообщений join.

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

Допустимые ответы для предложения объекта message к блоку.

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

Ключи политики, описывающие аспекты поведения планировщика. Каждый элемент политики описан парой ключ значение. Для получения дополнительных сведений о политиках планировщика и их влияние на планировщики см. раздел Планировщик задач (среда выполнения с параллелизмом).

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

Используется политикой SchedulerKind для описания типа потоков, которые следует использовать планировщику для базовых контекстов выполнения. Дополнительные сведения о доступных политиках планировщиков см. в разделе Перечисление PolicyElementKey.

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

Используется политикой SchedulingProtocol для описания, какой алгоритм планирования будет использоваться для планировщика. Дополнительные сведения о доступных политиках планировщиков см. в разделе Перечисление PolicyElementKey.

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

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

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

Описывает состояние выполнения объекта task_group или structured_task_group. Значение этого типа возвращается многочисленные методами, которые ожидают выполнения заданий, назначенных группе задач.

Функции

Имя

Описание

Функция asend

Перегружен. Операция асинхронной передачи, которая планирует задачу для распространения данных в целевой блок.

Функция 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_for

Перегружен. parallel_for выполняет итерацию по диапазону индексов и выполняет предоставленный пользователем функцию в каждой итерации параллельно.

Функция parallel_for_each

parallel_for_each применяет указанную функцию к каждому элементу в диапазоне, параллельно. Оно эквивалентно семантически функции for_each в пространстве имен std, за исключением того, что итерации по элементам выполняется параллельно, и порядок итерации не определен. Аргумент _Func должен поддерживать оператор вызова функции формы operator()(T), где параметр T является типом элемента контейнера, итерация по которому выполняется.

Функция parallel_invoke

Перегружен. Выполняет объекты функции, предоставленные в виде параметров в параллели, и блоки до завершения их выполнения. Каждый объект функции может быть лямбда-выражением, указателем на функцию или любым объектом, который поддерживает оператор вызова функции с сигнатурой void operator()().

Функция receive

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

Функция send

Перегружен. Операция синхронной отправки, которая ожидает до тех пор, пока целевой объект не принимает или отклоняет сообщение.

Функция swap

Обменивает элементы двух объектов concurrent_vector.

Функция try_receive

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

Операторы

Имя

Описание

Оператор operator!= (concurrent_vector)

Проверяет, равен ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны.

Оператор operator< (concurrent_vector)

Проверяет, меньше ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны.

Оператор operator<= (concurrent_vector)

Проверяет, меньше либо равен ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны.

Оператор operator== (concurrent_vector)

Проверяет, равен ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны.

Оператор operator> (concurrent_vector)

Проверяет, больше ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны.

Оператор operator>= (concurrent_vector)

Проверяет, больше ли равен ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны.

Константы

Имя

Описание

Константа ChoreEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с делами или задачами.

Константа ConcRT_ProviderGuid

Поставщик ETW GUID для среды параллелизма.

Константа CONCRT_RM_VERSION_1

Указывает поддержку интерфейса диспетчера ресурсов, определенные в Visual Studio 2010.

Константа ConcRTEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые не описаны подробнее другой категорией.

Константа ContextEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с контекстами.

Константа COOPERATIVE_TIMEOUT_INFINITE

Значение, указывающее, что время ожидания никогда не должно кончаться.

Константа COOPERATIVE_WAIT_TIMEOUT

Значение, указывающее, что время ожидания кончилось.

Константа INHERIT_THREAD_PRIORITY

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

Константа LockEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с блокировками.

Константа MaxExecutionResources

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

Константа PPLParallelForeachEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с использованием функции parallel_for_each.

Константа PPLParallelForEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с использованием функции parallel_for.

Константа PPLParallelInvokeEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с использованием функции parallel_invoke.

Константа ResourceManagerEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с диспетчером ресурсов.

Константа ScheduleGroupEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с группами расписания.

Константа SchedulerEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с действием расписания.

Константа VirtualProcessorEventGuid

Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с виртуальными процессорами.

Требования

Заголовок: agents.h, concrt.h, concrtrm.h, concurrent_queue.h, concurrent_vector.h, ppl.h

См. также

Другие ресурсы

Справочные материалы (среда выполнения с параллелизмом)