Partager via


task_group, classe

La classe task_group représente une collection de travail parallèle qui peut être attendue ou annulée.

Syntaxe

class task_group;

Membres

Constructeurs publics

Nom Description
task_group Surcharge. Construit un nouvel objet task_group.
~task_group Destructeur Détruit un objet task_group . Vous êtes censé appeler la ou run_and_wait la wait méthode sur l’objet avant l’exécution du destructeur, sauf si le destructeur s’exécute en raison d’une exception.

Méthodes publiques

Nom Description
cancel Effectue une tentative optimale d’annulation de l’arborescence de travail enracinée dans ce groupe de tâches. Chaque tâche planifiée sur le groupe de tâches sera annulée de manière transitive si possible.
is_canceling Informe l’appelant si le groupe de tâches est actuellement au milieu d’une annulation. Cela n’indique pas nécessairement que la cancel méthode a été appelée sur l’objet task_group (bien que cela qualifie certainement cette méthode pour retourner true). Il peut s’agir du cas où l’objet task_group s’exécute inline et qu’un groupe de tâches plus haut dans l’arborescence de travail a été annulé. Dans les cas tels que ceux où le runtime peut déterminer à l’avance que l’annulation transite par cet task_group objet, true sera également retournée.
run Surcharge. Planifie une tâche sur l’objet task_group . Si un task_handle objet est passé en tant que paramètre, runl’appelant est responsable de la gestion de la durée de vie de l’objet task_handle . La version de la méthode qui prend une référence à un objet de fonction en tant que paramètre implique l’allocation de tas à l’intérieur du runtime, ce qui peut être moins efficace que l’utilisation de la version qui prend une référence à un task_handle objet. La version qui prend le paramètre _Placement entraîne le biais de la tâche vers l’exécution à l’emplacement spécifié par ce paramètre.
run_and_wait Surcharge. Planifie l’exécution d’une tâche inline sur le contexte appelant à l’aide de l’objet pour la prise en charge complète de l’annulation task_group . La fonction attend ensuite que tous les travaux sur l’objet task_group soient terminés ou annulés. Si un task_handle objet est passé en tant que paramètre, run_and_waitl’appelant est responsable de la gestion de la durée de vie de l’objet task_handle .
Attendre Attend que tous les travaux sur l’objet task_group soient terminés ou annulés.

Notes

Contrairement à la classe fortement restreinte structured_task_group , la task_group classe est beaucoup plus générale. Elle n’a aucune des restrictions décrites par structured_task_group. task_group les objets peuvent être utilisés en toute sécurité entre les threads et utilisés de manière libre. L’inconvénient de la task_group construction est qu’elle ne peut pas effectuer aussi bien que la structured_task_group construction pour les tâches qui effectuent de petites quantités de travail.

Pour plus d’informations, consultez Parallélisme des tâches.

Hiérarchie d'héritage

task_group

Spécifications

En-tête : ppl.h

Espace de noms : concurrency

cancel

Effectue une tentative optimale d’annulation de l’arborescence de travail enracinée dans ce groupe de tâches. Chaque tâche planifiée sur le groupe de tâches sera annulée de manière transitive si possible.

void cancel();

Notes

Pour plus d’informations, consultez Annulation.

is_canceling

Informe l’appelant si le groupe de tâches est actuellement au milieu d’une annulation. Cela n’indique pas nécessairement que la cancel méthode a été appelée sur l’objet task_group (bien que cela qualifie certainement cette méthode pour retourner true). Il peut s’agir du cas où l’objet task_group s’exécute inline et qu’un groupe de tâches plus haut dans l’arborescence de travail a été annulé. Dans les cas tels que ceux où le runtime peut déterminer à l’avance que l’annulation transite par cet task_group objet, true sera également retournée.

bool is_canceling();

Valeur de retour

Indication indiquant si l’objet task_group se trouve au milieu d’une annulation (ou est garanti pour être bientôt).

Notes

Pour plus d’informations, consultez Annulation.

Exécuter

Planifie une tâche sur l’objet task_group . Si un task_handle objet est passé en tant que paramètre, runl’appelant est responsable de la gestion de la durée de vie de l’objet task_handle . La version de la méthode qui prend une référence à un objet de fonction en tant que paramètre implique l’allocation de tas à l’intérieur du runtime, ce qui peut être moins efficace que l’utilisation de la version qui prend une référence à un task_handle objet. La version qui prend le paramètre _Placement entraîne le biais de la tâche vers l’exécution à l’emplacement spécifié par ce paramètre.

template<
   typename _Function
>
void run(
   const _Function& _Func
);

template<
   typename _Function
>
void run(
   const _Function& _Func,
   location& _Placement
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle,
   location& _Placement
);

Paramètres

_Fonction
Type de l’objet de fonction qui sera appelé pour exécuter le corps du handle de tâche.

_Func
Fonction qui sera appelée pour appeler le corps de la tâche. Il peut s’agir d’une expression lambda ou d’un autre objet qui prend en charge une version de l’opérateur d’appel de fonction avec la signature void operator()().

_Placement
Référence à l’emplacement où la tâche représentée par le _Func paramètre doit s’exécuter.

_Task_handle
Handle pour le travail en cours de planification. Notez que l’appelant a la responsabilité de la durée de vie de cet objet. Le runtime continuera à s’attendre à ce qu’il soit actif tant que la ou la waitrun_and_wait méthode n’a pas été appelée sur cet task_group objet.

Notes

Le runtime planifie l’exécution de la fonction de travail fournie pour s’exécuter ultérieurement, ce qui peut être une fois la fonction appelante retournée. Cette méthode utilise un objet task_handle pour contenir une copie de la fonction de travail fournie. Par conséquent, les modifications d’état qui se produisent dans un objet de fonction que vous passez à cette méthode n’apparaissent pas dans votre copie de cet objet de fonction. En outre, assurez-vous que la durée de vie des objets que vous passez par pointeur ou par référence à la fonction de travail reste valide jusqu’à ce que la fonction de travail retourne.

Si les task_group destructeurs résultent du déroulement de la pile à partir d’une exception, vous n’avez pas besoin de garantir qu’un appel a été effectué à l’aide de la ou run_and_wait de la wait méthode. Dans ce cas, le destructeur annule et attend la fin de la tâche représentée par le _Task_handle paramètre.

La méthode lève une exception invalid_multiple_scheduling si le handle de tâche donné par le _Task_handle paramètre a déjà été planifié sur un objet de groupe de tâches via la run méthode et qu’il n’y a pas eu d’appel intermédiaire à la ou run_and_wait à la wait méthode sur ce groupe de tâches.

run_and_wait

Planifie l’exécution d’une tâche inline sur le contexte appelant à l’aide de l’objet pour la prise en charge complète de l’annulation task_group . La fonction attend ensuite que tous les travaux sur l’objet task_group soient terminés ou annulés. Si un task_handle objet est passé en tant que paramètre, run_and_waitl’appelant est responsable de la gestion de la durée de vie de l’objet task_handle .

template<
   class _Function
>
task_group_status run_and_wait(
   task_handle<_Function>& _Task_handle
);

template<
   class _Function
>
task_group_status run_and_wait(
   const _Function& _Func
);

Paramètres

_Fonction
Type de l’objet de fonction qui sera appelé pour exécuter le corps de la tâche.

_Task_handle
Handle de la tâche qui sera exécutée en ligne sur le contexte appelant. Notez que l’appelant a la responsabilité de la durée de vie de cet objet. Le runtime continuera de s’attendre à ce qu’il soit actif jusqu’à la fin de l’exécution de la run_and_wait méthode.

_Func
Fonction qui sera appelée pour appeler le corps du travail. Il peut s’agir d’une expression lambda ou d’un autre objet qui prend en charge une version de l’opérateur d’appel de fonction avec la signature void operator()().

Valeur de retour

Indique si l’attente a été satisfaite ou si le groupe de tâches a été annulé, en raison d’une opération d’annulation explicite ou d’une exception levée à partir de l’une de ses tâches. Pour plus d’informations, consultez task_group_status.

Notes

Notez qu’une ou plusieurs des tâches planifiées sur cet task_group objet peuvent s’exécuter inline sur le contexte appelant.

Si une ou plusieurs des tâches planifiées à cet task_group objet lèvent une exception, le runtime sélectionne une exception de ce type de choix et la propage hors de l’appel à la run_and_wait méthode.

Lors du retour de la run_and_wait méthode sur un task_group objet, le runtime réinitialise l’objet à un état propre où il peut être réutilisé. Cela inclut le cas où l’objet task_group a été annulé.

Dans le chemin d’exécution non exceptionnel, vous avez le mandat d’appeler cette méthode ou la wait méthode avant le destructeur des task_group exécutions.

task_group

Construit un nouvel objet task_group.

task_group();

task_group(
   cancellation_token _CancellationToken
);

Paramètres

_Cancellationtoken
Jeton d’annulation à associer à ce groupe de tâches. Le groupe de tâches est annulé lorsque le jeton est annulé.

Notes

Le constructeur qui accepte un jeton d’annulation crée un task_group jeton qui sera annulé lorsque la source associée au jeton est annulée. Fournir un jeton d’annulation explicite isole également ce groupe de tâches de participer à une annulation implicite d’un groupe parent avec un jeton différent ou aucun jeton.

~Task_group

Détruit un objet task_group . Vous êtes censé appeler la ou run_and_wait la wait méthode sur l’objet avant l’exécution du destructeur, sauf si le destructeur s’exécute en raison d’une exception.

~task_group();

Notes

Si le destructeur s’exécute en conséquence de l’exécution normale (par exemple, pas de déroulement de pile en raison d’une exception) et que ni les wait méthodes n’ont run_and_wait été appelées, le destructeur peut lever une exception missing_wait .

wait

Attend que tous les travaux sur l’objet task_group soient terminés ou annulés.

task_group_status wait();

Valeur de retour

Indique si l’attente a été satisfaite ou si le groupe de tâches a été annulé, en raison d’une opération d’annulation explicite ou d’une exception levée à partir de l’une de ses tâches. Pour plus d’informations, consultez task_group_status.

Notes

Notez qu’une ou plusieurs des tâches planifiées sur cet task_group objet peuvent s’exécuter inline sur le contexte appelant.

Si une ou plusieurs des tâches planifiées à cet task_group objet lèvent une exception, le runtime sélectionne une exception de ce type de choix et la propage hors de l’appel à la wait méthode.

L’appel wait d’un task_group objet le réinitialise à un état propre où il peut être réutilisé. Cela inclut le cas où l’objet task_group a été annulé.

Dans le chemin d’exécution non exceptionnel, vous avez le mandat d’appeler cette méthode ou la run_and_wait méthode avant le destructeur des task_group exécutions.

Voir aussi

accès concurrentiel Namespace
structured_task_group, classe
task_handle, classe