Concurrency, espace de noms

L'espace de noms Concurrency fournit des classes et des fonctions qui vous donnent accès au runtime d'accès concurrentiel, une infrastructure de programmation simultanée pour C++. Pour plus d'informations, consultez Concurrency Runtime.

namespace Concurrency;

Membres

Typedef

Nom

Description

runtime_object_identity

Chaque instance de message a une identité qui le suit lorsqu'il est cloné et passé entre des composants de messagerie. Ceci ne peut pas être l'adresse de l'objet de message.

TaskProc

Abstraction élémentaire d'une tâche, définie sous la forme void (__cdecl * TaskProc)(void *). Un TaskProc est appelé pour appeler le corps d'une tâche.

Classes

Nom

Description

agent, classe

Classe prévue pour être utilisée comme une classe de base pour tous les agents indépendants. Cela est utilisé pour masquer l'état d'autres agents et interagir via le passage de messages.

bad_target, classe

Cette classe décrit une exception qui est levée dès qu'un bloc de messagerie reçoit un pointeur vers une cible qui n'est pas valide pour l'opération en cours d'exécution.

call, classe

Un bloc de messagerie call est une source multiple, target_block classé qui appelle une fonction spécifiée lors de la réception d'un message.

Classe choice

Un bloc de messagerie choice est une source multiple, bloc de cible unique qui représente une interaction de flux de contrôle avec un jeu de sources. Le bloc de choix attendra que l'une des sources multiples produise un message et propagera l'index de la source qui a produit le message.

combinable, classe

L'objet combinable<T> vise à fournir des copies des données spécifiques au thread pour exécuter des sous-calculs locaux de thread sans verrou pendant des algorithmes parallèles. À la fin de l'opération en parallèle, les sous-calculs spécifiques au thread peuvent être fusionnés en un résultat final. Cette classe peut être utilisée à la place d'une variable partagée et peut améliorer les performances si la variable partagée est susceptible de provoquer de nombreux conflits.

concurrent_queue, classe

La classe concurrent_queue est une classe de conteneur de séquences qui autorise l'accès premier entré, premier sorti à ses éléments. Il permet un ensemble limité d'opérations d'accès concurrentiel sécurisées, telles que push et try_pop, pour n'en nommer que quelques-unes.

Classe concurrent_vector

La classe concurrent_vector est une classe de conteneur de séquences qui autorise l'accès aléatoire à tout élément. Elle permet des opérations d'ajout, d'accès d'éléments, d'accès d'itérateurs et de parcours d'itérateur sécurisées du point de vue de l'accès concurrentiel.

Context, classe

Représente une abstraction pour un contexte d'exécution.

context_self_unblock, classe

Cette classe décrit une exception qui est levée dès que la méthode Unblock d'un objet Context est appelée à partir du même contexte. Cela indiquerait qu'un contexte donné a tenté de se débloquer.

context_unblock_unbalanced, classe

Cette classe décrit une exception qui est levée dès que les appels aux méthodes Block et Unblock d'un objet Context ne sont pas correctement combinés.

critical_section, classe

Mutex non réentrant qui est explicitement informé du runtime d'accès concurrentiel.

CurrentScheduler, classe

Représente une abstraction pour le planificateur actuel associé au contexte d'appel.

default_scheduler_exists, classe

Cette classe décrit une exception qui est levée dès que la méthode Scheduler::SetDefaultSchedulerPolicy est appelée lorsqu'un planificateur par défaut existe déjà dans le processus.

event, class (runtime d'accès concurrentiel)

Événement de réinitialisation manuelle qui est explicitement informé du runtime d'accès concurrentiel.

improper_lock, classe

Cette classe décrit une exception qui est levée dès qu'un verrou est acquis de façon incorrecte.

improper_scheduler_attach, classe

Cette classe décrit une exception qui est levée dès que la méthode Attach est appelée sur un objet Scheduler qui est déjà attaché au contexte actuel.

improper_scheduler_detach, classe

Cette classe décrit une exception qui est levée dès que la méthode CurrentScheduler::Detach est appelée sur un contexte qui n'a pas été attaché à un planificateur via la méthode Attach d'un objet Scheduler.

improper_scheduler_reference, classe

Cette classe décrit une exception qui est levée dès que la méthode Reference est appelée sur un objet Scheduler en cours de fermeture, à partir d'un contexte qui ne fait pas partie de ce planificateur.

invalid_link_target, classe

Cette classe décrit une exception qui est levée dès que la méthode link_target d'un bloc de messagerie est appelée et que le bloc de messagerie ne peut pas se connecter à la cible. Il peut s'agir du résultat du dépassement du nombre de liens autorisé pour le bloc de messagerie ou de la tentative de lier deux fois une cible spécifique à la même source.

invalid_multiple_scheduling, classe

Cette classe décrit une exception qui est levée lorsqu'un objet task_handle est planifié plusieurs fois via la méthode run d'un objet task_group ou structured_task_group sans appel aux méthodes wait ou run_and_wait.

invalid_operation, classe

Cette classe décrit une exception qui est levée lorsqu'une opération non valide est exécutée qui n'est pas décrite de façon plus précise par un autre type d'exception levé par le runtime d'accès concurrentiel.

invalid_oversubscribe_operation, classe

Cette classe décrit une exception qui est levée lorsque la méthode Context::Oversubscribe est appelée avec le paramètre _BeginOversubscription défini sur false sans appel antérieur à la méthode Context::Oversubscribe avec le paramètre _BeginOversubscription défini sur true.

invalid_scheduler_policy_key, classe

Cette classe décrit une exception qui est levée dès qu'une clé non valide ou inconnue est passée à un constructeur d'objet SchedulerPolicy, ou qu'une clé qui doit être modifiée via d'autres moyens comme la méthode SetConcurrencyLimits est passée à la méthode SetPolicyValue d'un objet SchedulerPolicy.

invalid_scheduler_policy_thread_specification, classe

Cette classe décrit une exception qui est levée lors de toute tentative de définir les limites d'accès concurrentiel d'un objet SchedulerPolicy de sorte que la valeur de la clé MinConcurrency est inférieure à la valeur de la clé MaxConcurrency.

invalid_scheduler_policy_value, classe

Cette classe décrit une exception qui est levée dès qu'une clé de stratégie d'un objet SchedulerPolicy est définie sur une valeur non valide pour cette clé.

ISource, classe

La classe ISource est l'interface pour tous les blocs source. Les blocs source propagent des messages aux blocs ITarget.

ITarget, classe

La classe ITarget est l'interface pour tous les blocs cibles. Les blocs cible consomment des messages offerts à eux par les blocs ISource.

join, classe

Un bloc de messagerie join est un propagator_block de cible unique, de source multiple et classé qui combine ensemble des messages de type _Type à partir de chacune de ses sources.

message, classe

Enveloppe de message de base qui contient la charge utile de données qui est passée entre des blocs de messagerie.

message_not_found, classe

Cette classe décrit une exception qui est levée dès qu'un bloc de messagerie ne peut pas trouver un message demandé.

message_processor, classe

La classe message_processor est la classe de base abstraite pour le traitement d'objets message. Il n'y a aucune garantie sur le classement des messages.

missing_wait, classe

Cette classe décrit une exception qui est levée dès que des tâches sont encore planifiées pour un objet task_group ou structured_task_group au moment où le destructeur de cet objet s'exécute. Cette exception ne sera jamais levée si le destructeur est atteint en raison du déroulement de pile suite à une exception.

multi_link_registry, classe

L'objet multi_link_registry est un network_link_registry qui gère plusieurs blocs source ou plusieurs blocs cibles.

multitype_join, classe

Un bloc de messagerie multitype_join est un bloc de messagerie de cible unique et de source multiple qui combine ensemble des messages de types différents à partir de chacune de ses sources et offre un tuple des messages combinés à ses cibles.

nested_scheduler_missing_detach, classe

Cette classe décrit une exception qui est levée lorsque le runtime d'accès concurrentiel détecte que vous avez omis d'appeler la méthode CurrentScheduler::Detach sur un contexte joint à un deuxième planificateur via la méthode Attach de l'objet Scheduler.

network_link_registry, classe

La classe de base abstraite network_link_registry gère les liens entre les blocs source et cibles.

operation_timed_out, classe

Cette classe décrit une exception qui est levée lorsqu'une opération a dépassé le délai.

ordered_message_processor, classe

Un ordered_message_processor est un message_processor qui permet aux blocs de messages de traiter les messages dans l'ordre dans lequel ils ont été reçus.

Classe overwrite_buffer

Un bloc de messagerie overwrite_buffer est un propagator_block ordonné, multi-sources et multi-cibles capable de stocker un seul message la fois. Les nouveaux messages remplacent ceux précédemment maintenus.

propagator_block, classe

La classe propagator_block est une classe de base abstraite pour les blocs de messages qui sont à la fois une source et une cible. Il combine les fonctionnalités des classes target_block et source_block.

reader_writer_lock, classe

Verrou de lecteur/writer, basé sur file d'attente, à préférence de writer, à rotation uniquement locale. Le verrou accorde un accès premier entré, premier sorti aux writers et prive les lecteurs sous une charge continue de writers.

ScheduleGroup, classe

Représente une abstraction pour un groupe de planification. Les groupes de planification organisent un ensemble de travaux connexes qui bénéficient d'être planifiés près des uns des autres, au niveau temporel en exécutant une autre tâche du même groupe avant de se déplacer vers un autre groupe, ou au niveau spatial en exécutant plusieurs éléments du même groupe sur le même nœud NUMA ou socket physique.

Scheduler, classe

Représente une abstraction pour un planificateur de runtime d'accès concurrentiel.

scheduler_not_attached, classe

Cette classe décrit une exception qui est levée dès qu'une opération nécessitant qu'un planificateur soit attaché au contexte actuel est réalisée alors qu'aucun planificateur n'est attaché.

scheduler_resource_allocation_error, classe

Cette classe décrit une exception qui est levée en raison de l'échec de l'acquisition d'une ressource critique dans le runtime d'accès concurrentiel.

SchedulerPolicy, classe

La classe SchedulerPolicy contient un jeu de paires clé/valeur, un pour chaque élément de stratégie, qui contrôle le comportement d'une instance du planificateur.

Classe single_assignment

Un bloc de messagerie single_assignment est un propagator_block de cible multiple, de source multiple et classé capable de stocker un message unique, écrit une seule fois.

single_link_registry, classe

L'objet single_link_registry est un network_link_registry qui gère uniquement un seul bloc source ou cible.

source_block, classe

La classe source_block est une classe de base abstraite pour les blocs source uniquement. La classe fournit une fonctionnalité basique de gestion des liaisons et vérifie les erreurs courantes.

source_link_manager, classe

L'objet source_link_manager gère les liens réseau entre les blocs de messagerie et les blocs ISource.

structured_task_group, classe

La classe structured_task_group représente une collection très structurée de travail parallèle. Vous pouvez mettre en file d'attente des tâches parallèles individuelles dans un structured_task_group à l'aide d'objets task_handle et attendre qu'elles se terminent, ou annuler le groupe de tâches avant la fin de leur exécution, ce qui conduira à l'abandon de toutes les tâches qui n'ont pas commencé.

target_block, classe

La classe target_block est une classe de base abstraite qui fournit des fonctionnalités de gestion des liens de base et vérifie les erreurs pour les blocs cibles uniquement.

task_group, classe

La classe task_group représente une collection de travaux parallèles qui peuvent être mis en attente ou annulés.

task_handle, classe

La classe task_handle représente un élément de travail parallèle individuel. Il encapsule les instructions et les données obligatoires pour exécuter un travail.

Classe timer

Un bloc de messagerie timer est un source_block à cible unique capable d'envoyer un message à sa cible après qu'une période spécifiée s'est écoulée ou à intervalles spécifiques.

Classe transformer

Un bloc de messagerie transformer est un propagator_block ordonné, multi-sources, à cible unique qui peut accepter des messages d'un type et stocker un nombre illimité de messages d'un type différent.

Classe unbounded_buffer

Un bloc de messagerie unbounded_buffer est un propagator_block ordonné multi-sources et multi-cibles capable de stocker un nombre illimité de messages.

unsupported_os, classe

Cette classe décrit une exception qui est levée dès qu'un système d'exploitation non pris en charge est utilisé. Le runtime d'accès concurrentiel ne prend pas en charge les systèmes d'exploitation antérieurs à Windows XP avec Service Pack 3.

Structures

Nom

Description

DispatchState, structure

La structure DispatchState est utilisée pour transférer l'état à la méthode IExecutionContext::Dispatch. Il décrit les circonstances sous lesquelles la méthode Dispatch est appelée sur une interface IExecutionContext.

IExecutionContext, structure

Interface à un contexte d'exécution qui peut s'exécuter sur un processeur virtuel donné et dont le contexte peut être modifié de manière coopérative.

IExecutionResource, structure

Abstraction d'un thread matériel.

IResourceManager, structure

Interface au Gestionnaire de ressources du runtime d'accès concurrentiel. C'est l'interface par laquelle les planificateurs communiquent avec le Gestionnaire des ressources.

IScheduler, structure

Interface à une abstraction d'un planificateur de travail. Le Gestionnaire des ressources du runtime d'accès concurrentiel utilise cette interface pour communiquer avec les planificateurs de tâches.

ISchedulerProxy, structure

Interface par laquelle les planificateurs communiquent avec le Gestionnaire des ressources du runtime d'accès concurrentiel pour négocier l'allocation des ressources.

IThreadProxy, structure

Abstraction d'un thread d'exécution. Selon la clé de stratégie SchedulerType du planificateur que vous créez, le Gestionnaire des ressources vous accordera un proxy de thread stocké par un thread Win32 standard ou un thread UMS (User-Mode Schedulable). Les threads UMS sont pris en charge sur les systèmes d'exploitation 64 bits avec la version Windows 7 et supérieure.

IUMSCompletionList, structure

Représente une liste de saisie semi-automatique UMS. Lorsqu'un thread UMS se bloque, le contexte de planification désigné du planificateur est distribué afin de décider quoi planifier sur la racine de processeur virtuel sous-jacente pendant que le thread d'origine est bloqué. Lorsque le thread d'origine se débloque, le système d'exploitation le met en file d'attente dans la liste de saisie semi-automatique qui est accessible via cette interface. Le planificateur peut interroger la liste de saisie semi-automatique sur le contexte de planification désigné ou tout autre emplacement sur lequel il recherche du travail.

IUMSScheduler, structure

Interface à une abstraction d'un planificateur de travail qui veut que le Gestionnaire de ressources du runtime d'accès concurrentiel lui envoie des threads UMS (user mode schedulable). Le Gestionnaire des ressources utilise cette interface pour communiquer avec les planificateurs de thread UMS. L'interface IUMSScheduler hérite de l'interface IScheduler.

IUMSThreadProxy, structure

Abstraction d'un thread d'exécution. Si vous souhaitez que des threads planifiables en mode utilisateur (UMS) soient accordés à votre planificateur, définissez la valeur de l'élément de stratégie du planificateur SchedulerKind sur UmsThreadDefault et implémentez l'interface IUMSScheduler. Les threads UMS sont pris en charge uniquement sur les systèmes d'exploitation 64 bits avec la version Windows 7 et supérieure.

IUMSUnblockNotification, structure

Représente une notification du Gestionnaire de ressources informant qu'un proxy de thread bloqué ayant déclenché un retour au contexte de planification désigné du planificateur est maintenant débloqué et prêt à être planifié. Cette interface n'est pas valide une fois le contexte d'exécution associé du proxy de thread, retourné par la méthode GetContext, est replanifié.

IVirtualProcessorRoot, structure

Abstraction d'un thread matériel sur laquelle un proxy de thread peut s'exécuter.

Énumérations

Nom

Description

agent_status, énumération

États valides pour un agent.

ConcRT_EventType, énumération

Types d'événements qui peuvent être suivis à l'aide des fonctionnalités de traçage offertes par le runtime d'accès concurrentiel.

CriticalRegionType, énumération

Type de région critique dans laquelle se trouve un contexte.

DynamicProgressFeedbackType, énumération

Utilisé par la stratégie DynamicProgressFeedback pour décrire si les ressources du planificateur seront rééquilibrées d'après les statistiques rassemblées à partir du planificateur ou uniquement selon les processeurs virtuels qui entrent ou sortent de l'état d'inactivité via des appels aux méthodes Activate et Deactivate sur l'interface IVirtualProcessorRoot. Pour plus d'informations sur les stratégies de planificateur disponibles, consultez PolicyElementKey, énumération.

join_type, énumération

Type d'un bloc de messagerie join.

message_status, énumération

Réponses valides pour une offre d'un objet message à un bloc.

PolicyElementKey, énumération

Clés de stratégie qui décrivent des aspects de comportement de planificateur. Chaque élément de stratégie est décrit par une paire clé-valeur. Pour plus d'informations sur les stratégies de planificateur et leur impact sur les planificateurs, consultez Planificateur de tâches (runtime d'accès concurrentiel).

SchedulerType, énumération

Utilisé par la stratégie SchedulerKind pour décrire le type des threads que le planificateur doit utiliser pour les contextes d'exécution sous-jacents. Pour plus d'informations sur les stratégies de planificateur disponibles, consultez PolicyElementKey, énumération.

SchedulingProtocolType, énumération

Utilisé par la stratégie SchedulingProtocol pour décrire l'algorithme de planification qui sera utilisé pour le planificateur. Pour plus d'informations sur les stratégies de planificateur disponibles, consultez PolicyElementKey, énumération.

SwitchingProxyState, énumération

Utilisé pour indiquer l'état dans lequel se trouve un proxy de thread, lorsqu'il exécute un basculement de contexte coopératif vers un proxy de thread différent.

task_group_status, énumération

Décrit l'état d'exécution d'un objet task_group ou structured_task_group. Une valeur de ce type est retournée par de nombreuses méthodes qui attendent que les tâches planifiées pour un groupe de tâches se terminent.

Fonctions

Nom

Description

asend, fonction

Surchargé. Opération d'envoi asynchrone qui planifie une tâche permettant de propager les données au bloc cible.

make_choice, fonction

Surchargé. Construit un bloc de messagerie choice à partir d'un Scheduler ou ScheduleGroup facultatif et entre deux et dix sources d'entrée.

make_greedy_join, fonction

Surchargé. Construit un bloc de messagerie greedy multitype_join à partir d'un Scheduler ou ScheduleGroup facultatif et entre deux et dix sources d'entrée.

make_join, fonction

Surchargé. Construit un bloc de messagerie non_greedy multitype_join à partir d'un Scheduler ou ScheduleGroup facultatif et entre deux et dix sources d'entrée.

make_task, fonction

Méthode de fabrique pour la création d'un objet task_handle.

parallel_for, fonction

Surchargé. parallel_for itère au sein d'une plage d'index et exécute une fonction fournie par utilisateur à chaque itération, en parallèle.

parallel_for_each, fonction

parallel_for_each applique une fonction spécifiée à chaque élément dans une plage, en parallèle. Elle est sémantiquement équivalente à la fonction for_each dans l'espace de noms std, mais l'itération des éléments est exécutée en parallèle et l'ordre d'itération n'est pas spécifié. L'argument _Func doit prendre en charge un opérateur d'appel de fonction de la forme operator()(T), où le paramètre T est le type d'élément du conteneur sur lequel l'itération est réalisée.

parallel_invoke, fonction

Surchargé. Exécute les objets de fonction fournis comme paramètres en parallèle et se bloque jusqu'à la fin de leur exécution. Chaque objet de fonction peut être une expression lambda, un pointeur vers une fonction ou tout objet qui prend en charge l'opérateur d'appel de fonction avec la signature void operator()().

receive, fonction

Surchargé. Implémentation receive générale permettant à un contexte d'attendre des données d'une source exactement et de filtrer les valeurs acceptées.

send, fonction

Surchargé. Opération d'envoi synchrone qui attend que la cible accepte ou refuse le message.

swap, fonction

Échange les éléments de deux objets concurrent_vector.

try_receive, fonction

Surchargé. Implémentation try-receive générale permettant à un contexte de rechercher des données d'une source exactement et de filtrer les valeurs acceptées. Si les données ne sont pas prêtes, la méthode retournera la valeur false.

Opérateurs

Nom

Description

Opérateur operator!= (concurrent_vector)

Teste si l'objet concurrent_vector à gauche de l'opérateur n'est pas égal à l'objet concurrent_vector du côté droit.

Opérateur operator< (concurrent_vector)

Teste si l'objet concurrent_vector à gauche de l'opérateur est inférieur à l'objet concurrent_vector du côté droit.

Opérateur operator<= (concurrent_vector)

Teste si l'objet concurrent_vector à côté gauche de l'opérateur est inférieur ou égal à l'objet concurrent_vector du côté droit.

Opérateur operator== (concurrent_vector)

Teste si l'objet concurrent_vector à gauche de l'opérateur est égal à l'objet concurrent_vector du côté droit.

Opérateur operator> (concurrent_vector)

Teste si l'objet concurrent_vector à gauche de l'opérateur est supérieur à l'objet concurrent_vector du côté droit.

Opérateur operator>= (concurrent_vector)

Teste si l'objet concurrent_vector à gauche de l'opérateur est supérieur ou égal à l'objet concurrent_vector du côté droit.

Constantes

Nom

Description

ChoreEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec des tâches.

ConcRT_ProviderGuid, constante

GUID du fournisseur ETW pour le runtime d'accès concurrentiel.

CONCRT_RM_VERSION_1, constante

Indique la prise en charge de l'interface du Gestionnaire de ressources définie dans Visual Studio 2010.

ConcRTEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel qui n'est pas décrit plus spécifiquement par une autre catégorie.

ContextEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec des contextes.

COOPERATIVE_TIMEOUT_INFINITE, constante

Valeur qui indique qu'une attente ne doit jamais expirer.

COOPERATIVE_WAIT_TIMEOUT, constante

Valeur qui indique qu'une attente a expiré.

INHERIT_THREAD_PRIORITY, constante

Valeur spéciale pour la clé de stratégie ContextPriority qui indique que la priorité de thread de tous les contextes du planificateur doit être la même que celle du thread ayant créé le planificateur.

LockEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec des verrous.

MaxExecutionResources, constante

Valeur spéciale pour les clés de stratégie MinConcurrency et MaxConcurrency. Prend comme valeur par défaut le nombre de threads matériels sur l'ordinateur en l'absence d'autres contraintes.

PPLParallelForeachEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec l'utilisation de la fonction parallel_for_each.

PPLParallelForEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec l'utilisation de la fonction parallel_for.

PPLParallelInvokeEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec l'utilisation de la fonction parallel_invoke.

ResourceManagerEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec le gestionnaire des ressources.

ScheduleGroupEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec des groupes de planning.

SchedulerEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec l'activité du planificateur.

VirtualProcessorEventGuid, constante

Catégorie GUID qui décrit des événements ETW déclenchés par le runtime d'accès concurrentiel directement en rapport avec des processeurs virtuels.

Configuration requise

En-tête : agents.h, concrt.h, concrtrm.h, concurrent_queue.h, concurrent_vector.h, ppl.h

Voir aussi

Autres ressources

Référence (runtime d'accès concurrentiel)