Класс structured_task_group

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

class structured_task_group;

Члены

Открытые конструкторы

Имя

Описание

Конструктор structured_task_group::structured_task_group

Перегружен. Создает новый объект structured_task_group.

Деструктор structured_task_group::~structured_task_group

Удаляет объект structured_task_group. Ожидается вызов метода wait или run_and_wait на объект до выполнения деструктора, если деструктор не выполняется в результате очистки стека из-за исключения.

Открытые методы

Имя

Описание

Метод structured_task_group::cancel

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

Метод structured_task_group::is_canceling

Сообщает вызывающей стороне, находится ли группа задач в данный момент в состоянии отмены. Это не обязательно означает, что метод cancel был вызван на объект structured_task_group (хотя это определенно позволяет этому метод вернуть true). Может быть,что объект structured_task_group выполняется встроено и группа задач выше в дереве работы была отменена. В подобных случаях там, где среда выполнения может заранее определить, что отмена будет передаваться через этот объект structured_task_group, будет возвращено значение true.

Метод structured_task_group::run

Перегружен. Назначает задание на объекте structured_task_group. Вызывающий объект управляет временем жизни переданного в параметр _Task_handle объекта task_handle. Версия, которая принимает параметр _Placement, заставляет задачу стремиться выполняться в расположении, указанном параметром.

Метод structured_task_group::run_and_wait

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

Метод structured_task_group::wait

Ожидает до тех пор, пока вся работа над structured_task_group не завершена или отменена.

Заметки

Существует ряд серьезных ограничений, которые накладываются на использование объекта structured_task_group с целью повышения производительности:

  • Один объект structured_task_group не может использоваться несколькими потоками. Все операции для объекта structured_task_group должны быть выполнены потоком, создавшим объект. Два исключения из этого правила являются функциями члена cancel и is_canceling. Объект может не быть в списке захвата лямбда-выражения и может использоваться внутри задачи, если задача не является одной из операций отмены.

  • Все задания, назначенные объекту structured_task_group, планируются с помощью объектов task_handle, для которых необходимо явно управлять временем жизни.

  • Несколько групп могут использоваться только в абсолютно вложенных порядке. Если объявлено два объекта structured_task_group, второй объявленный (внутренний) должен разрушиться перед вызовов любого метода, кроме cancel и is_canceling, на первый (внешний). Это условие истинно как в случае простого объявления нескольких объектов structured_task_group объектов внутри одного и того же или функционально вложенных областей, а также в случае, если задача, которое было поставлена в очередь в structured_task_group через методы run или run_and_wait.

  • В отличие от общего класса task_group, все состояния в классе structured_task_group являются окончательными. После помещения задач в очередь группы и ожидания их завершения нельзя использовать ту же группу снова.

Для получения дополнительной информации см. Параллелизм задач (среда выполнения с параллелизмом).

Иерархия наследования

structured_task_group

Требования

Заголовок: ppl.h

Пространство имен: concurrency

См. также

Ссылки

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

Класс task_group

Класс task_handle