Пространство имен Concurrency
Пространство имен Concurrency содержит классы и функции, предоставляющие доступ к среде выполнения с параллелизмом, которая является платформой параллельного программирования для C++. Дополнительные сведения см. в разделе Среда выполнения с параллелизмом.
namespace Concurrency;
Члены
Определения типов
Имя |
Описание |
---|---|
runtime_object_identity |
Каждый экземпляр сообщения имеет идентификацию, которая сопутствует ему по мере клонирования и передачи между компонентами обмена сообщениями. Это не может быть адрес объекта сообщения. |
TaskProc |
Элементарная абстракция для задачи, определенная как void (__cdecl * TaskProc)(void *). TaskProc вызывается для вызова основного текста задачи. |
Классы
Имя |
Описание |
---|---|
Класс предназначен для использования как базовый класс для всех независимых агентов. Используется для скрытия состояние от других агентов и взаимодействия через передачи сообщений. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда блок обмена сообщениями получает указатель на целевой объект, который неверен для выполняемой операции. |
|
Блок обмена сообщениями call — многоисточниковый, упорядоченный target_block, который вызывает заданную функцию при приеме сообщения. |
|
Блок сообщений choice — многоисточниковый одноцелевой блок, который представляет взаимодействие потока управления с набором источников. Блок выбора будет ожидать любой из нескольких источников для создания сообщения и распространит индекс источника, создавшего сообщение. |
|
Объект combinable<T> предназначен для предоставления потокозакрытых копий данных для выполнения свободных от блокировок потоколокальных подвычислений в процессе параллельных алгоритмов. В конце параллельной операции потокозакрытые подвыражения могут быть объединены в окончательный результат. Этот класс может использоваться вместо общей переменной и может привести к улучшение производительности, если бы иначе на общей переменной была сильная конкуренция. |
|
Класс concurrent_queue является классом-контейнером последовательности, позволяющим доступ "первый вошел — первый вышел" к его элементам. Он позволяет ограниченный набор параллельно-безопасных операций, таких как push и try_pop, это лишь некоторые из них. |
|
Класс concurrent_vector является классом-контейнером последовательности, позволяющим произвольный доступ к любому элементу. Позволяет параллельно-безопасно выполнять операции присоединения, получения доступа к элементу, доступа к итератору и обхода итератора. |
|
Представляет абстракцию контекста выполнения. |
|
Данный класс описывает исключение, которое создается при каждом вызове метода Unblock объекта Context из одного и того же контекста. Это означает попытку данного контекста снять с себя блокировку. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда вызовы к методам Block и Unblock объекта Context объединены неправильно. |
|
Не реентрабельный мьютекс, который учитывает явным образом среду параллелизма. |
|
Представляет абстракцию для текущего планировщика, связанного с вызывающим контекстом. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда метод Scheduler::SetDefaultSchedulerPolicy вызывается, когда планировщик по умолчанию уже существует внутри процесса. |
|
Событие ручного сброса, которое учитывает явным образом среду параллелизма. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда блокировка получена неправильно. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда вызывается метод Attach на объект Scheduler, который уже присоединен к текущему контексту. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда вызывается метод CurrentScheduler::Detach на контекст, который не присоединен к планировщику через метод Attach объекта Scheduler. |
|
Данный класс описывает исключение, которое создается при каждом вызове метода Reference на объект Scheduler, который завершает работу, из контекста, который не является частью этого планировщика. |
|
Данный класс описывает исключение, которое создается всякий раз, когда вызывается метод link_target блока обмена сообщениями блок и блока обмена сообщениями не может создать связь с целевой объект. Это может быть результатом превышения числа ссылок, допустимых для блока сообщений или при попытке связать определенную цель дважды с одним и тем же источника. |
|
Данный класс описывает исключение, возникающее когда объект task_handle запланирован несколько раз через метод run объекта task_group или structured_task_group без промежуточных вызовов метода wait или run_and_wait. |
|
Данный класс описывает исключение, возникающее при выполнении недопустимую операцию, не описанного более точно другим типом исключения, создаваемым средой выполнения параллелизма. |
|
Данный класс описывает исключение, возникающее при вызове метода Context::Oversubscribe с параметром _BeginOversubscription, равным false без передварительного вызова метода Context::Oversubscribe с параметром _BeginOversubscription, имеющим значение true. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда конструктору объекта SchedulerPolicy передан неправильный или неизвестный ключ или метод SetPolicyValue объекта SchedulerPolicy получил ключ, который должен быть изменен через другие средства, такие как метод SetConcurrencyLimits. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда сделана попытка установить ограничения параллелизма объекта SchedulerPolicy таким образом, что значение ключа MinConcurrency меньше, чем значение ключа MaxConcurrency. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда ключу политики объекта SchedulerPolicy присвоено недопустимое значение для этого ключа. |
|
Класс ISource является интерфейсом для всех исходных блоков. Блоки источников распространяют сообщения блокам ITarget. |
|
Класс ITarget является интерфейсом для всех целевых блоков. Целевые блоки потребляют сообщения, предлагаемые им блоками ISource. |
|
Блок сообщений join — многоисточниковый одноцелевой упорядоченный propagator_block, который сочетает сообщения типа _Type от каждого из своих источников. |
|
Основной конверт сообщения, содержащий полезную нагрузку данных, передаваемую между блоками обмена сообщениями. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда блок обмена сообщениями не может найти запрошенное сообщение. |
|
Класс message_processor является абстрактным базовым классом для обработки объектов message. Нет никакой гарантии на порядок сообщений. |
|
Данный класс описывает исключение, которое выдается каждый раз, когда имеются задачи, по-прежнему запланированные объекту task_group или structured_task_group во время выполнения деструктора этого объекта. Никогда не будет создано это исключение, если деструктор достигается из-за очистки стека в результате исключения. |
|
Объект multi_link_registry — это network_link_registry, который управляет несколькими исходными блоками или несколькими целевыми блоками. |
|
Блок сообщений multitype_join — многоисточниковый одноцелевой упорядоченный блок сообщений, который сочетает сообщения различных типов от каждого из своих источников и предлагает целевым объектам кортеж объединенных сообщений. |
|
Данный класс описывает исключение, которое возникает, когда среда выполнения параллелизма обнаруживает, что вы не вызвали метод CurrentScheduler::Detach на контекст, который присоединен к второй планировщик через метод Attach объекта Scheduler. |
|
Абстрактный базовый класс network_link_registry управляет связями между исходными и целевыми блоками. |
|
Данный класс описывает исключение, возникающее когда время операции истекло. |
|
ordered_message_processor является message_processor, позволяющим блокам сообщений обрабатывать сообщения в том порядке, в котором они были получены. |
|
Блок сообщений overwrite_buffer — многоцелевой, многоисточниковый, упорядоченный propagator_block, способный хранить одно сообщение за раз. Новые сообщения перезаписывают предыдущие. |
|
Класс propagator_block является абстрактным базовым классом для блоков сообщений, которые одновременно исходные и целевые. Объединяет функциональные возможности обоих классов source_block и target_block. |
|
Блокировка чтения-записи на основе очереди с предпочтением записи со строго локальной циклической работой. Блокировка предоставляет доступ "первым вошел — первым вышел" для писателей и исключает доступ читателей под постоянной нагрузкой со стороны писателей. |
|
Представляет абстракцию группы расписания. Группы расписаний организуют набор связанных работ, которые дают преимущества планирования вблизи друг от друга, выполняя другую задачу в той же группе перед перемещением другую группу или пространственно, выполняя несколько элементов в пределах одной и той же группы на одном узле NUMA или физическом сокете. |
|
Представляет абстракцию для планировщика среды параллелизма. |
|
Данный класс описывает исключение, которое создается при каждом выполнении операции, требующей, чтобы планировщик был присоединен к текущему контексту, а он не присоединен. |
|
Данный класс описывает исключение, возникающее из-за ошибки получить критический ресурс в среде выполнения параллелизма. |
|
Класс SchedulerPolicy содержит набор пар "ключ—значение", одна для каждого элемента политики, контролирующего поведение экземпляра планировщика. |
|
Блок сообщений single_assignment — многоцелевой, многоисточниковый, упорядоченный propagator_block, способный хранить одно записываемое один раз message. |
|
Объект single_link_registry — это network_link_registry, управляющий только одним исходным или целевым блоком. |
|
Класс source_block является абстрактным базовым классом для блоков, являющихся только источниками. Класс предоставляет основные функциональные возможности управления ссылками, а также распространенные проверки ошибок. |
|
Объект source_link_manager управляет ссылками сети блока сообщений на блоки ISource. |
|
Класс structured_task_group представляет высокоструктурированную коллекцию параллельной работы. Отдельные параллельные задачи можно ставить в очередь structured_task_group с помощью объектов task_handle и дождаться их завершения или отменить группу задач до завершения их выполнения, что прервет все задачи, которые не начали выполнение. |
|
Класс target_block является абстрактным базовым классом, который предоставляет основные функции управления ссылками и проверку ошибок для блоков, являющихся только целевыми. |
|
Класс task_group представляет коллекцию параллельные работы которые могут подождать или быть отменена. |
|
Класс task_handle представляет отдельный параллельный рабочий элемент. Он инкапсулирует инструкции и данные, необходимые для выполнения части работы. |
|
Блок сообщений timer — это одноцелевой source_block, способный отправлять сообщение цели по истечении указанного периода времени или через определенные интервалы. |
|
Блок сообщений transformer — одноцелевой многоисточниковый упорядоченный propagator_block, который может принимать сообщения одного типа и способен хранить неограниченное число сообщений другого типа. |
|
Блок сообщений unbounded_buffer — многоцелевой, многоисточниковый, упорядоченный propagator_block, способный хранить неограниченное число сообщений. |
|
Данный класс описывает исключение, которое создается всякий раз, когда используется неподдерживаемая операционная система. Среда параллелизма не поддерживает версии операционных систем до Windows XP с пакетом обновления 3 (SP3). |
Структуры
Имя |
Описание |
---|---|
Структура DispatchState используется для передачи состояния методу IExecutionContext::Dispatch. Он описывает обстоятельства, под которыми вызывается метод Dispatch на интерфейсе IExecutionContext. |
|
Интерфейс для контекста выполнения, которые можно запускать на данный виртуальный процессор и доступный для совместного переключения контекста. |
|
Абстракция для аппаратного потока. |
|
Интерфейс к диспетчеру ресурсов среды параллелизма. Это интерфейс, по которому планировщики взаимодействовать с диспетчер ресурсов. |
|
Интерфейс к абстракции планировщика работы. Диспетчер ресурсов среды параллелизма использует этот интерфейс для связи с планировщиками работы. |
|
Интерфейс, по которому планировщики взаимодействуют со средой параллелизма диспетчера ресурсов для согласования выделения ресурсов. |
|
Абстракция для потока выполнения. В зависимости от создаваемого ключа политики SchedulerType планировщика, диспетчер ресурсов будет предоставить прокси-поток, который основывается на регулярном потоке Win32 или потоком, планируемым в режиме пользователя (UMS). UMS потоки являются поддерживаемыми в 64-разрядных операционных системах, начиная с Windows 7 и выше. |
|
Представляет список завершения UMS. Когда UMS поток блокируется, назначенный контекст планирования планировщика запускается для принятия решения, что запланировать на базовый корень виртуального процессора, пока исходный поток заблокирован. Когда разблокируется исходный поток, операционная система ставит его в очередь списка завершения, которое доступен через этот интерфейс. Планировщик может запросить список завершения на назначенный планирования контекст или любое другое место, в котором он ищет работу. |
|
Интерфейс к абстракции планировщика работы, который хочет, чтобы диспетчер ресурсов среда параллелизма передал ему планируемые пользовательским режимом потоки (UMS). Диспетчер ресурсов использует этот интерфейс для связи с планировщиками UMS-потоков. Интерфейс IUMSScheduler наследует от интерфейса IScheduler. |
|
Абстракция для потока выполнения. Если требуется, чтобы планировщик предоставлять запланированные пользовательского режимом потоков (UMS), задайте значение для элемента политики планировщика SchedulerKind как UmsThreadDefault и реализуйте интерфейс IUMSScheduler. UMS потоки являются только поддерживаемыми в 64-разрядных операционных системах, начиная с Windows 7 и выше. |
|
Представляет уведомление от диспетчера ресурсов, что прокси поток, который заблокирован и запустил возврат к назначенному планирования контексту планировщика, разблокирован и готов для планирования. Этот интерфейс является недопустимым после перепланирования связанного контекста выполнения прокси-потока, возвращенного из метода GetContext. |
|
Абстракция для аппаратного потока, на котором может выполняться прокси-поток. |
Перечисления
Имя |
Описание |
---|---|
Допустимые состояния для agent. |
|
Типы событий, которые могут быть отслежены при использовании возможности трассировки, предоставляемой средой параллелизма. |
|
Тип критической области, в которой контекст находится. |
|
Используется политикой DynamicProgressFeedback для описания, будет ли быть перебалансированы ресурсы для планировщика согласно статистическим сведениям, собранным из планировщика или только на основе виртуальных процессоров, переходящих из и в состояния простоя через вызовы методов Activate и Deactivate на интерфейсе IVirtualProcessorRoot. Дополнительные сведения о доступных политиках планировщиков см. в разделе Перечисление PolicyElementKey. |
|
Тип блока сообщений join. |
|
Допустимые ответы для предложения объекта message к блоку. |
|
Ключи политики, описывающие аспекты поведения планировщика. Каждый элемент политики описан парой ключ значение. Для получения дополнительных сведений о политиках планировщика и их влияние на планировщики см. раздел Планировщик задач (среда выполнения с параллелизмом). |
|
Используется политикой SchedulerKind для описания типа потоков, которые следует использовать планировщику для базовых контекстов выполнения. Дополнительные сведения о доступных политиках планировщиков см. в разделе Перечисление PolicyElementKey. |
|
Используется политикой SchedulingProtocol для описания, какой алгоритм планирования будет использоваться для планировщика. Дополнительные сведения о доступных политиках планировщиков см. в разделе Перечисление PolicyElementKey. |
|
Используется для обозначения состояния прокси-потока, когда он выполняет совместное контекстное переключение на другой прокси-поток. |
|
Описывает состояние выполнения объекта task_group или structured_task_group. Значение этого типа возвращается многочисленные методами, которые ожидают выполнения заданий, назначенных группе задач. |
Функции
Имя |
Описание |
---|---|
Перегружен. Операция асинхронной передачи, которая планирует задачу для распространения данных в целевой блок. |
|
Перегружен. Конструирует блок сообщений choice из необязательного Scheduler или ScheduleGroup и от двух до десяти источников ввода. |
|
Перегружен. Конструирует блок сообщений greedy multitype_join из необязательного Scheduler или ScheduleGroup и от двух до десяти источников ввода. |
|
Перегружен. Конструирует блок сообщений non_greedy multitype_join из необязательного Scheduler или ScheduleGroup и от двух до десяти источников ввода. |
|
Метод фабрики для создания объекта task_handle. |
|
Перегружен. parallel_for выполняет итерацию по диапазону индексов и выполняет предоставленный пользователем функцию в каждой итерации параллельно. |
|
parallel_for_each применяет указанную функцию к каждому элементу в диапазоне, параллельно. Оно эквивалентно семантически функции for_each в пространстве имен std, за исключением того, что итерации по элементам выполняется параллельно, и порядок итерации не определен. Аргумент _Func должен поддерживать оператор вызова функции формы operator()(T), где параметр T является типом элемента контейнера, итерация по которому выполняется. |
|
Перегружен. Выполняет объекты функции, предоставленные в виде параметров в параллели, и блоки до завершения их выполнения. Каждый объект функции может быть лямбда-выражением, указателем на функцию или любым объектом, который поддерживает оператор вызова функции с сигнатурой void operator()(). |
|
Перегружен. Реализация общего получения, позволяющая контексту ждать данных из ровно одного источника и фильтровать значения, которые принимаются. |
|
Перегружен. Операция синхронной отправки, которая ожидает до тех пор, пока целевой объект не принимает или отклоняет сообщение. |
|
Обменивает элементы двух объектов concurrent_vector. |
|
Перегружен. Реализация общей попытки получения, позволяющая контексту искать данные из ровно одного источника и фильтровать значения, которые принимаются. Если данные не готовы, метод вернет значение false. |
Операторы
Имя |
Описание |
---|---|
Проверяет, равен ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны. |
|
Проверяет, меньше ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны. |
|
Проверяет, меньше либо равен ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны. |
|
Проверяет, равен ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны. |
|
Проверяет, больше ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны. |
|
Проверяет, больше ли равен ли объект concurrent_vector на левой стороне оператора объекту concurrent_vector правой стороны. |
Константы
Имя |
Описание |
---|---|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с делами или задачами. |
|
Поставщик ETW GUID для среды параллелизма. |
|
Указывает поддержку интерфейса диспетчера ресурсов, определенные в Visual Studio 2010. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые не описаны подробнее другой категорией. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с контекстами. |
|
Значение, указывающее, что время ожидания никогда не должно кончаться. |
|
Значение, указывающее, что время ожидания кончилось. |
|
Особое значение для ключа политики ContextPriority указывающее, что приоритет потока всех контекстов в планировщике должен быть тем же, что у потока, который создал планировщик. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с блокировками. |
|
Специальное значение для ключей политики MinConcurrency и MaxConcurrency. По умолчанию число аппаратных потоков на компьютере в случае отсутствия других ограничений. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с использованием функции parallel_for_each. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с использованием функции parallel_for. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с использованием функции parallel_invoke. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с диспетчером ресурсов. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с группами расписания. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с действием расписания. |
|
Категория GUID, описывающий события ETW, созданные средой выполнения параллелизма, которые непосредственно связаны с виртуальными процессорами. |
Требования
Заголовок: agents.h, concrt.h, concrtrm.h, concurrent_queue.h, concurrent_vector.h, ppl.h