Compartir a través de


Espacio de nombres de simultaneidad

El espacio de nombres Concurrency proporciona las clases y funciones que dan acceso al Runtime de simultaneidad, un marco de programación simultáneo para C++. Para obtener más información, vea Runtime de simultaneidad.

namespace Concurrency;

Miembros

Typedefs

Name

Descripción

runtime_object_identity

Cada instancia del mensaje tiene una identidad que lo sigue mientras se clona y pasa entre los componentes de mensajería. Ésta no puede ser la dirección del objeto de mensaje.

TaskProc

Una abstracción básica para una tarea, definida como void (__cdecl * TaskProc)(void *). Se llama a TaskProc para invocar el cuerpo de una tarea.

Clases

Name

Descripción

agent (Clase)

Una clase diseñada para usarse como una clase base para todos los agentes independientes. Se usa para ocultar el estado de otros agentes e interactuar a través del paso de mensajes.

bad_target (Clase)

Esta clase describe una excepción que se produce cada vez que un bloque de mensajería recibe un puntero a un destino que no es válido para la operación que se realiza.

Clase call

Un bloque de mensajería call es un target_block con varios orígenes y ordenado, que invoca una función especificada al recibir un mensaje.

Clase choice

Un bloque de mensajería choice es un bloque de varios orígenes, de destino único que representa una interacción del flujo de control con un conjunto de orígenes. El bloque de elección esperará a cualquiera de los diversos orígenes para generar un mensaje y propagará el índice del origen que produjo el mensaje.

Clase combinable

El objeto combinable<T> está pensado para proporciona copias de subproceso privadas de datos, para realizar subcómputos de subprocesos locales sin bloqueos durante algoritmos paralelos. Al final de la operación paralela, los subcómputos de subprocesos privados pueden combinarse en un resultado final. Esta clase se puede utilizar en lugar de una variable compartida y puede dar lugar a una mejora en el rendimiento si, de lo contrario, habría mucha contención en esa variable compartida.

Clase concurrent_queue

La clase concurrent_queue es una clase de contenedor de secuencia que permite el acceso a sus elementos donde el primero en entrar es el primero en salir. Habilita un conjunto limitado de operaciones seguras para simultaneidad, como push y try_pop, por citar algunas.

Clase concurrent_vector

La clase concurrent_vector es una clase de contenedor de secuencia que permite el acceso aleatorio a cualquier elemento. Habilita las operaciones de anexión segura para simultaneidad, acceso de elemento, acceso de iterador e iterador transversal.

Context (Clase)

Representa una abstracción para un contexto de ejecución.

context_self_unblock (Clase)

Esta clase describe una excepción que se produce cada vez que se llama al método Unblock de un objeto Context desde el mismo contexto. Esto indicaría que un contexto especificado ha intentado desbloquearse a sí mismo.

context_unblock_unbalanced (Clase)

Esta clase describe una excepción que se produce cada vez que se llama a los métodos Unblock y Block de un objeto Context que no están emparejados correctamente.

critical_section (Clase)

Una exclusión mutua no reentrante que es explícitamente consciente del runtime de simultaneidad.

CurrentScheduler (Clase)

Representa una abstracción para el programador actual asociado al contexto de la llamada.

default_scheduler_exists (Clase)

Esta clase describe una excepción que se produce cada vez que se llama al método Scheduler::SetDefaultSchedulerPolicy cuando un programador predeterminado ya existe dentro del proceso.

event (Clase del runtime de simultaneidad)

Un evento de reinicio manual que es explícitamente consciente del runtime de simultaneidad.

improper_lock (Clase)

Esta clase describe una excepción que se produce cada vez que se realiza un bloqueo de forma incorrecta.

improper_scheduler_attach (Clase)

Esta clase describe una excepción que se produce cada vez que se llama al método Attach en un objeto Scheduler que ya se ha adjuntado al contexto actual.

improper_scheduler_detach (Clase)

Esta clase describe una excepción que se produce cada vez que se llama al método CurrentScheduler::Detach en un contexto que no se ha adjuntado a ningún programador mediante el método Attach de un objeto Scheduler.

improper_scheduler_reference (Clase)

Esta clase describe una excepción que se produce cada vez que se llama al método Reference en un objeto Scheduler que se está cerrando, desde un contexto que no forma parte de ese programador.

invalid_link_target (Clase)

Esta clase describe una excepción que se produce cada vez que se llama al método link_target de un bloque de mensajería y el bloque de mensajería no se puede vincular al destino. Este puede ser el resultado de superar el número de vínculos que se permite el bloque de mensajería o de intentos para vincular un destino específico dos veces al mismo origen.

invalid_multiple_scheduling (Clase)

Esta clase describe una excepción que se produce cuando un objeto task_handle se programa varias veces a través del método run de un objeto task_group o structured_task_group sin una llamada que se interponga a los métodos wait o run_and_wait.

invalid_operation (Clase)

Esta clase describe una excepción que se produce cuando se realiza una operación no válida y que no se describe con mayor precisión por otro tipo de excepción producida por el runtime de simultaneidad.

invalid_oversubscribe_operation (Clase)

Esta clase describe una excepción que se produce cuando se llama al método Context::Oversubscribe con el parámetro _BeginOversubscription establecido en false sin una llamada anterior al método Context::Oversubscribe con el parámetro _BeginOversubscription establecido en true.

invalid_scheduler_policy_key (Clase)

Esta clase describe una excepción que se produce cada vez que una clave no válida o desconocida se pasa a un constructor de objeto SchedulerPolicy, o el método SetPolicyValue de un objeto SchedulerPolicy se pasa una clave que se debe cambiar mediante otros medios como el método SetConcurrencyLimits.

invalid_scheduler_policy_thread_specification (Clase)

Esta clase describe una excepción que se produce cada vez que se realiza un intento para establecer los límites de simultaneidad de un objeto SchedulerPolicy de tal forma que el valor de la clave MinConcurrency es menor que el valor de la clave MaxConcurrency.

invalid_scheduler_policy_value (Clase)

Esta clase describe una excepción que se produce cada vez que una clave de directiva de un objeto SchedulerPolicy se establece en un valor no válido para esa clave.

ISource (Clase)

La clase ISource es la interfaz para todos los bloques de origen. Los bloques de origen propagan mensajes a los bloques ITarget.

ITarget (Clase)

La clase ITarget es la interfaz para todos los bloques de destino. Los bloques de destinos consumen mensajes ofrecidos por los bloques ISource.

join (Clase)

Un bloque de mensajería join es un bloque propagator_block de destino único y de varios orígenes ordenado, que combina los mensajes de tipo _Type de cada uno de sus orígenes.

message (Clase)

El sobre del mensaje básico que contiene la carga de datos que se pasan entre bloques de mensajería.

message_not_found (Clase)

Esta clase describe una excepción que se produce cada vez que un bloque de mensajería no puede encontrar un mensaje solicitado.

message_processor (Clase)

La clase message_processor es la clase base abstracta del procesamiento de objetos message. No hay ninguna garantía en la clasificación de los mensajes.

missing_wait (Clase)

Esta clase describe una excepción que se produce cada vez que existan todavía tareas programadas a un objeto task_group o structured_task_group en el momento que el destructor de objeto se ejecuta. Nunca se producirá esta excepción si el destructor se alcanza debido al desenredo de pila como el resultado de una excepción.

multi_link_registry (Clase)

El objeto multi_link_registry es network_link_registry que administra varios bloques de origen o varios bloques de destino.

multitype_join (Clase)

Un bloque de mensajería multitype_join es un bloque de mensajería de destino único, de varios orígenes, que combina los mensajes de diferentes tipos de cada uno de sus orígenes y ofrece una tupla de los mensajes combinados con sus destinos.

nested_scheduler_missing_detach (Clase)

Esta clase describe una excepción que se produce cuando el runtime de simultaneidad detecta que dejó de llamar al método CurrentScheduler::Detach en un contexto adjunto a un segundo programador a través del método Attach del objeto Scheduler.

network_link_registry (Clase)

La clase base abstracta network_link_registry administra los vínculos entre los bloques de origen y de destino.

operation_timed_out (Clase)

Esta clase describe una excepción que se produce cuando una operación ha agotado su tiempo de espera.

ordered_message_processor (Clase)

Un ordered_message_processor es un message_processor que permite a los bloques de mensaje procesar los mensajes en el orden que se recibieron.

Clase overwrite_buffer

Un bloque de mensajería overwrite_buffer es un bloque propagator_block de destino único, de varios orígenes y ordenado capaz de almacenar un único mensaje cada vez. Los nuevos mensajes sobrescriben a los retenidos previamente.

propagator_block (Clase)

La clase propagator_block es una clase base abstracta para los bloques de mensaje que son un bloque de origen y de destino. Combina la funcionalidad de las clases source_block y target_block.

reader_writer_lock (Clase)

Un bloqueo de lectura o escritura basado en cola con preferencia del sistema de escritura con giro solo local. El bloqueo permite el acceso FIFO (el primero en entrar es el primero en salir) a los sistemas de escritura y lectores agotados bajo una carga continua de sistemas de escritura.

ScheduleGroup (Clase)

Representa una abstracción para un grupo de programación. Los grupos de programación organizan un conjunto de trabajos relacionados que se benefician de programarse juntos ya sea temporalmente, mediante la ejecución de otra tarea en el mismo grupo antes de trasladarse a otro grupo, o espacialmente, mediante la ejecución de varios elementos del mismo grupo en el mismo nodo NUMA o socket físico.

Scheduler (Clase)

Representa una abstracción para un programador del runtime de simultaneidad.

scheduler_not_attached (Clase)

Esta clase describe una excepción que se produce cada vez que se realiza una operación que requiere un programador para adjuntarse al contexto actual y uno no es.

scheduler_resource_allocation_error (Clase)

Esta clase describe una excepción que se produce debido al error para adquirir un recurso crítico en el runtime de simultaneidad.

SchedulerPolicy (Clase)

La clase SchedulerPolicy contiene un conjunto de pares clave-valor, uno para cada elemento de la directiva, que controla el comportamiento de una instancia del programador.

Clase single_assignment

Un bloque de mensajería single_assignment es un bloque propagator_block de destino único, de varios orígenes y ordenado capaz de almacenar un único message en el que solo se puede escribir una vez.

single_link_registry (Clase)

El objeto single_link_registry es network_link_registry que administra un solo bloque de origen o bloque de destino.

source_block (Clase)

La clase source_block es una clase base abstracta para bloques sólo de origen. La clase proporciona funcionalidad de administración de vínculo básico, así como comprobaciones de errores frecuentes.

source_link_manager (Clase)

El objeto source_link_manager administra los vínculos de red de bloque de mensajería para los bloques ISource.

structured_task_group (Clase)

La clase structured_task_group representa una colección muy estructurada de trabajos paralelos. Puede poner en cola tareas individuales paralelas a structured_task_group mediante objetos task_handle, y esperar a que se completen, o cancelar el grupo de tareas antes de que haya finalizado su ejecución, que anulará cualquier tarea cuya ejecución no haya comenzado.

target_block (Clase)

La clase target_block es una clase base abstracta que proporciona funcionalidad de administración de vínculo básico y comprobación de errores solo para bloques de destino.

task_group (Clase)

La clase task_group representa una colección de trabajo paralelo que se puede esperar o cancelar.

task_handle (Clase)

La clase task_handle representa un elemento de trabajo individual paralelo. Encapsula las instrucciones y los datos necesarios para ejecutar una parte de trabajo.

Clase timer

Un bloque de mensajería timer es un bloque source_block con destino único, capaz de enviar un mensaje a su destino cuando un período de tiempo especificado haya transcurrido o en intervalos concretos.

Clase transformer

Un bloque de mensajería transformer es un bloque propagator_block de destino único, de varios orígenes y ordenado capaz de almacenar un número ilimitado de mensajes de un tipo diferente.

Clase unbounded_buffer

Un bloque de mensajería unbounded_buffer es un bloque propagator_block de destino único, de varios orígenes y ordenado capaz de almacenar un número ilimitado de mensajes.

unsupported_os (Clase)

Esta clase describe una excepción que se produce cada vez que se usa un sistema operativo no compatible. El runtime de simultaneidad no admite sistemas operativos anteriores a Windows XP con Service Pack 3.

Estructuras

Name

Descripción

DispatchState (Estructura)

La estructura DispatchState se usa para transferir el estado al método IExecutionContext::Dispatch. Describe las circunstancias bajo las que el método Dispatch se invoca en una interfaz IExecutionContext.

IExecutionContext (Estructura)

Una interfaz a un contexto de ejecución que se puede ejecutar en un procesador virtual determinado y que puede cambiar de contexto de forma cooperativa

IExecutionResource (Estructura)

Una abstracción para un subproceso del hardware.

IResourceManager (Estructura)

Una interfaz al administrador de recursos del runtime de simultaneidad. Esta es la interfaz que usan los programadores para comunicares con el administrador de recursos.

IScheduler (Estructura)

Una interfaz a una abstracción de un programador de trabajo. El administrador de recursos del runtime de simultaneidad usa esta interfaz para comunicar con programadores de trabajo.

ISchedulerProxy (Estructura)

La interfaz por la que los programadores se comunican con el administrador de recursos del runtime de simultaneidad para negociar la asignación de recursos.

IThreadProxy (Estructura)

Una abstracción para un subproceso de ejecución. Dependiendo de la clave de directiva SchedulerType del programador que crea, el administrador de recursos le permitirá un proxy del subproceso que está respaldado por un subproceso de Win32 normal o por un subproceso programable de modo de usuario (UMS). Los subprocesos UMS se admiten en sistemas operativos de 64 bits con versión de Windows 7 y superior.

IUMSCompletionList (Estructura)

Representa una lista de realización UMS. Cuando se bloquea un subproceso UMS, el contexto de programación designado del programador se envía para tomar una decisión sobre qué programar en la raíz del procesador virtual subyacente mientras se bloquea el subproceso original. Cuando el subproceso original se desbloquea, el sistema operativo lo pone en cola de la lista de finalización que es accesible a través de esta interfaz. El programador puede consultar la lista de finalización en el contexto de programación designado o en cualquier otro lugar que busca trabajo.

IUMSScheduler (Estructura)

Una interfaz a una abstracción de un programador de trabajo que desea que el administrador de recursos del runtime de simultaneidad controle los subprocesos programables de modo de usuario (UMS). El administrador de recursos usa esta interfaz para comunicarse con los programadores de subprocesos UMS. La interfaz IUMSScheduler hereda de la interfaz IScheduler.

IUMSThreadProxy (Estructura)

Una abstracción para un subproceso de ejecución. Si desea conceder al programador subprocesos programables en modo usuario (UMS), establezca el valor para el elemento de directiva de programador SchedulerKind en UmsThreadDefault e implemente la interfaz IUMSScheduler. Los subprocesos UMS se admiten únicamente en sistemas operativos de 64 bits con versión de Windows 7 y superior.

IUMSUnblockNotification (Estructura)

Representa una notificación del administrador de recursos indicando que un proxy del subproceso que había bloqueado y desencadenado un valor devuelto al contexto de programación designado del programador, se ha desbloqueado y está listo para ser programado. Esta interfaz no es válida una vez que el proxy del subproceso asociado al contexto de ejecución, devuelto desde el método GetContext, se vuelve a programar.

IVirtualProcessorRoot (Estructura)

Una abstracción para un subproceso del hardware en el que un proxy del subproceso se puede ejecutar.

Enumeraciones

Name

Descripción

agent_status (Enumeración)

Los estados válidos para agent.

ConcRT_EventType (Enumeración)

Los tipos de eventos que pueden atribuirse utilizando la funcionalidad de traza proporcionada por el runtime de simultaneidad.

CriticalRegionType (Enumeración)

El tipo de región crítica dentro del que se encuentra un contexto.

DynamicProgressFeedbackType (Enumeración)

Utilizado por la directiva DynamicProgressFeedback para describir si los recursos para el programador se volverán a equilibrar según la información estadística recopilada desde el programador o sólo se basarán en procesadores virtuales que entran y salen del estado de inactividad a través de llamadas a los métodos Deactivate y Activate en la interfaz IVirtualProcessorRoot. Para obtener más información sobre las directivas del programador disponibles, vea PolicyElementKey (Enumeración).

join_type (Enumeración)

El tipo de un bloque de mensajería join.

message_status (Enumeración)

Las respuestas válidas para una oferta de un objeto message para un bloque.

PolicyElementKey (Enumeración)

Claves de directiva que describen aspectos de comportamiento del programador. Cada elemento de directiva se describe mediante un par de clave y valor. Para obtener más información sobre las directivas del programador y su impacto en los programadores, vea Programador de tareas (Runtime de simultaneidad).

SchedulerType (Enumeración)

Utilizado por la directiva SchedulerKind para describir el tipo de subprocesos que el programador debería usar para contextos de ejecución subyacentes. Para obtener más información sobre las directivas del programador disponibles, vea PolicyElementKey (Enumeración).

SchedulingProtocolType (Enumeración)

Utilizado por la directiva SchedulingProtocol para describir qué algoritmo de programación utilizará el programador. Para obtener más información sobre las directivas del programador disponibles, vea PolicyElementKey (Enumeración).

SwitchingProxyState (Enumeración)

Se usa para denotar el estado en el que se encuentra un proxy del subproceso, cuando se ejecuta un cambio de contexto cooperativo a un proxy del subproceso diferente.

task_group_status (Enumeración)

Describe el estado de ejecución de un objeto task_group o structured_task_group. Un valor de este tipo lo devuelven numerosos métodos que esperan las tareas programadas para que un grupo de tareas se complete.

Funciones

Name

Descripción

asend (Función)

Sobrecargado. Una operación de envío asincrónica, que programa una tarea para propagar los datos al bloque de destino.

make_choice (Función)

Sobrecargado. Construye un bloque de mensajería choice de un Scheduler opcional o ScheduleGroup y entre dos y diez orígenes de entrada.

make_greedy_join (Función)

Sobrecargado. Construye un bloque de mensajería greedy multitype_join de un Scheduler opcional o ScheduleGroup y entre dos y diez orígenes de entrada.

make_join (Función)

Sobrecargado. Construye un bloque de mensajería non_greedy multitype_join de un Scheduler opcional o ScheduleGroup y entre dos y diez orígenes de entrada.

make_task (Función)

Un método generador para crear un objeto task_handle.

parallel_for (Función)

Sobrecargado. parallel_for itera sobre un intervalo de índices y ejecuta una función proporcionada por el usuario en cada iteración, en paralelo.

parallel_for_each (Función)

parallel_for_each aplica una función especificada a cada elemento de un intervalo, en paralelo. Es semánticamente equivalente a la función for_each en el espacio de nombres std, solo que la iteración sobre los elementos se realiza en paralelo, y el orden de iteración no está especificado. El argumento _Func debe admitir un operador de llamada de función del formulario operator()(T) donde el parámetro T es el tipo de elemento del contenedor que se recorre en iteración.

parallel_invoke (Función)

Sobrecargado. Ejecuta los objetos de función proporcionados como parámetros en paralelo y se bloquea hasta que hayan terminado de ejecutarse. Cada objeto de función puede ser una expresión lambda, un puntero a una función o cualquier otro objeto que admita una versión del operador de llamada de función con la firma void operator()().

receive (Función)

Sobrecargado. Una implementación receive general, permitiendo a un contexto esperar datos de exactamente un origen y filtrar los valores que se aceptan.

send (Función)

Sobrecargado. Una operación de envío sincrónico, que espera hasta el destino acepta o rechaza el mensaje.

swap (Función)

Intercambia los elementos de dos objetos concurrent_vector.

try_receive (Función)

Sobrecargado. Una implementación try-receive general, permitiendo a un contexto buscar datos de exactamente un origen y filtrar los valores que se aceptan. Si los datos no están listos, este método devolverá false.

Operadores

Name

Descripción

operator!= Operator (concurrent_vector)

Comprueba si el objeto concurrent_vector en el lado izquierdo del operador no es igual que el objeto concurrent_vector del lado derecho.

operator< Operator (concurrent_vector)

Comprueba si el objeto concurrent_vector en el lado izquierdo del operador es menor que el objeto concurrent_vector del lado derecho.

operator<= Operator (concurrent_vector)

Comprueba si el objeto concurrent_vector en el lado izquierdo del operador es menor o igual que el objeto concurrent_vector del lado derecho.

operator== Operator (concurrent_vector)

Comprueba si el objeto concurrent_vector en el lado izquierdo del operador es igual que el objeto concurrent_vector del lado derecho.

operator> Operator (concurrent_vector)

Comprueba si el objeto concurrent_vector en el lado izquierdo del operador es mayor que el objeto concurrent_vector del lado derecho.

operator>= Operator (concurrent_vector)

Comprueba si el objeto concurrent_vector en el lado izquierdo del operador es mayor o igual que el objeto concurrent_vector del lado derecho.

Constantes

Name

Descripción

ChoreEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con quehaceres o tareas.

ConcRT_ProviderGuid (Constante)

El GUID del proveedor de ETW para el Runtime de simultaneidad.

CONCRT_RM_VERSION_1 (Constante)

Indica la compatibilidad de la interfaz del administrador de recursos definida en Visual Studio 2010.

ConcRTEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que no se describen más específicamente por otra categoría.

ContextEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con contextos.

COOPERATIVE_TIMEOUT_INFINITE (Constante)

Valor que indica que una espera nunca debe agotar el tiempo de espera.

COOPERATIVE_WAIT_TIMEOUT (Constante)

Valor que indica que se ha agotado el tiempo de espera.

INHERIT_THREAD_PRIORITY (Constante)

Valor especial para la clave de la directiva ContextPriority que indica que la prioridad del subproceso de todos los contextos en el programador debe ser la misma que la del subproceso que creó el programador.

LockEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con bloqueos.

MaxExecutionResources (Constante)

Valor especial para las claves MinConcurrency y MaxConcurrency de la directiva. Tiene como valor predeterminado el número de subprocesos de hardware en el equipo en la ausencia de otras restricciones.

PPLParallelForeachEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con el uso de la función parallel_for_each.

PPLParallelForEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con el uso de la función parallel_for.

PPLParallelInvokeEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con el uso de la función parallel_invoke.

ResourceManagerEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con el administrador de recursos.

ScheduleGroupEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con grupos de programación.

SchedulerEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con la actividad del programador.

VirtualProcessorEventGuid (Constante)

Una categoría GUID que describe eventos ETW desencadenados por el runtime de simultaneidad que están directamente relacionados con los procesadores virtuales.

Requisitos

Encabezado: agents.h, concrt.h, concrtrm.h, concurrent_queue.h, concurrent_vector.h, ppl.h

Vea también

Otros recursos

Referencia (Runtime de simultaneidad)