Spazio dei nomi Concurrency
Lo spazio dei nomi Concurrency fornisce le classi e le funzioni che consentono l'accesso al runtime di concorrenza, un framework di programmazione simultaneo per C++. Per ulteriori informazioni, vedere Runtime di concorrenza.
namespace Concurrency;
Membri
Definizioni typedef
Nome |
Oggetto di descrizione |
---|---|
runtime_object_identity |
Ogni istanza del messaggio dispone di un'identità che lo segue quando viene duplicato e viene passato tra i componenti della messaggistica. Non può corrispondere all'indirizzo dell'oggetto del messaggio. |
TaskProc |
Un'astrazione elementare per un'attività, definita come void (__cdecl * TaskProc)(void *). TaskProc è chiamato per richiamare il corpo di un'attività. |
Classi
Nome |
Oggetto di descrizione |
---|---|
Classe destinata all'utilizzo come classe di base per tutti gli agenti indipendenti. Si utilizza per nascondere lo stato dagli altri agenti e interagire tramite passaggio di messaggi. |
|
Questa classe descrive un'eccezione generata ogni qualvolta un blocco della messaggistica riceve un puntatore a una destinazione non valida per l'operazione eseguita. |
|
Un blocco della messaggistica call è un oggetto target_block multi-origine ordinato che richiama una funzione specificata quando riceve un messaggio. |
|
Un blocco della messaggistica choice è un blocco multi-origine a destinazione singola che rappresenta un'interazione del flusso di controllo con un set di origini. Il blocco di prima qualità attenderà che una qualsiasi delle molteplici origini produca un messaggio e propagherà l'indice dell'origine che ha prodotto il messaggio. |
|
L'oggetto combinable<T> ha lo scopo di fornire copie di dati di thread privato, per eseguire calcoli secondari locali per thread senza blocco durante algoritmi paralleli. Alla fine dell'operazione parallela, è possibile unire i sub-calcoli del thread privato in un risultato finale. Questa classe è utilizzabile al posto di una variabile condivisa e può comportare un miglioramento nelle prestazioni qualora vi fosse in caso contrario molto conflitto su tale variabile condivisa. |
|
La classe concurrent_queue è una classe contenitore di sequenze che consente l'accesso di tipo First-in First-out ai relativi elementi. Abilita un set limitato di operazioni sicure per concorrenza, quali push e try_pop, per citarne alcune. |
|
La classe concurrent_vector è una classe contenitore di sequenze che consente un accesso casuale a qualsiasi elemento. Abilita cassaforte di concorrenza aggiungere, accesso dell'elemento, accesso dell'iteratore e operazioni di traversali di iteratore. |
|
Consente di rappresentare un'astrazione per un contesto di esecuzione. |
|
Questa classe descrive un'eccezione generata ogni qualvolta il metodo Unblock di un oggetto Context viene chiamato dallo stesso contesto. Potrebbe indicare un tentativo da parte di un contesto specificato di sbloccarsi. |
|
Questa classe descrive un'eccezione generata ogni qualvolta le chiamate ai metodi Block e Unblock di un oggetto Context non sono abbinate correttamente. |
|
Un'esclusione reciproca non rientrante che tiene conto in modo esplicito del runtime di concorrenza. |
|
Consente di rappresentare un'astrazione per l'utilità di pianificazione corrente associata al contesto di chiamata. |
|
Questa classe descrive un'eccezione generata ogni qualvolta il metodo Scheduler::SetDefaultSchedulerPolicy viene chiamato quando esiste già un'utilità di pianificazione predefinita all'interno del processo. |
|
Un evento di reimpostazione manuale che tiene conto in modo esplicito del runtime di concorrenza. |
|
Questa classe descrive un'eccezione generata ogni qualvolta un blocco viene acquisito in modo errato. |
|
Questa classe descrive un'eccezione generata ogni qualvolta il metodo Attach viene chiamato su un oggetto Scheduler già allegato al contesto corrente. |
|
Questa classe descrive un'eccezione generata ogni qualvolta il metodo CurrentScheduler::Detach viene chiamato su un contesto che non è stato allegato ad alcuna unità di pianificazione tramite il metodo Attach di un oggetto Scheduler. |
|
Questa classe descrive un'eccezione generata ogni qualvolta il metodo Reference viene chiamato su un oggetto che si sta chiudendo Scheduler, da un contesto che non fa parte dell'unità di pianificazione. |
|
Questa classe descrive un'eccezione generata ogni qualvolta il metodo link_target di un blocco della messaggistica viene chiamato e tale blocco non è in grado di collegarsi alla destinazione. Potrebbe essere il risultato del superamento del numero di collegamenti consentito dal blocco della messaggistica o del tentativo di collegare una destinazione specifica due volte alla stessa origine. |
|
Questa classe descrive un'eccezione generata quando un oggetto task_handle è pianificato più volte tramite il metodo run di un oggetto task_group o structured_task_group senza una chiamata intermedia a uno dei metodi wait o run_and_wait. |
|
Questa classe descrive un'eccezione generata quando viene eseguita un'operazione non valida non più descritta in maniera accurata da un altro tipo di eccezione generata dal runtime di concorrenza. |
|
Questa classe descrive un'eccezione generata quando il metodo Context::Oversubscribe viene chiamato con il parametro _BeginOversubscription impostato su false senza una chiamata precedente al metodo Context::Oversubscribe con il parametro _BeginOversubscription impostato su true. |
|
Questa classe descrive un'eccezione generata ogni qualvolta una chiave non valida o sconosciuta viene passata a un costruttore dell'oggetto SchedulerPolicy o il metodo SetPolicyValue di un oggetto SchedulerPolicy viene passato a una chiave che deve essere modificata con altri mezzi come, ad esempio, il metodo SetConcurrencyLimits. |
|
Questa classe descrive un'eccezione generata ogni qualvolta si tenta di impostare i limiti di concorrenza di un oggetto SchedulerPolicy in modo che il valore della chiave MinConcurrency sia inferiore a quella della chiave MaxConcurrency. |
|
Questa classe descrive un'eccezione generata ogni qualvolta una chiave dei criteri di un oggetto SchedulerPolicy viene impostata su un valore non valido per tale chiave. |
|
La classe ISource, corrisponde all'interfaccia per tutti i blocchi di origine. I blocchi di origine propagano messaggi nei blocchi ITarget. |
|
La classe ITarget, corrisponde all'interfaccia per tutti i blocchi di destinazione. I blocchi di destinazione utilizzano messaggi a loro offerti da blocchi ISource. |
|
Un blocco della messaggistica join è un propagator_block multi-origine, a destinazione singola, che combina insieme messaggi di tipo _Type da ognuna delle origini. |
|
Busta del messaggio di base contenente il payload dei dati passati tra blocchi della messaggistica. |
|
Questa classe descrive un'eccezione generata ogni qualvolta un blocco della messaggistica non è in grado di trovare un messaggio richiesto. |
|
La classe message_processor rappresenta la classe base astratta per l'elaborazione degli oggetti message. Non esiste garanzia sull'ordinamento dei messaggi. |
|
Questa classe descrive un'eccezione generata ogni qualvolta vi sono attività ancora pianificate per un oggetto task_group o structured_task_group nel momento di esecuzione del distruttore dell'oggetto. Questa eccezione non sarà mai generata se il distruttore viene raggiunto a causa del processo di rimozione dello stack come risultato di un'eccezione. |
|
L'oggetto multi_link_registry è un network_link_registry che gestisce più blocchi di origine o più blocchi di destinazione. |
|
Un blocco della messaggistica multitype_join è un blocco multi-origine, a destinazione singola, che combina messaggi di diverso tipo da ciascuna delle sue origini e offre una tupla dei messaggi combinati alle sue destinazioni. |
|
Questa classe descrive un'eccezione generata quando il runtime di concorrenza rileva che non è sta eseguita la chiamata al metodo CurrentScheduler::Detach su un contesto allegato a una seconda utilità di pianificazione tramite il metodo Attach dell'oggetto Scheduler. |
|
La classe base astratta network_link_registry gestisce i collegamenti tra i blocchi di origine e quelli di destinazione. |
|
Questa classe descrive un'eccezione generata quando un'operazione è scaduta. |
|
Un ordered_message_processor è un message_processor che consente ai blocchi del messaggio di elaborare messaggi nell'ordine in cui vengono ricevuti. |
|
Un blocco della messaggistica overwrite_buffer è un propagator_block multi-origine a destinazione singola, in grado di archiviare un unico messaggio alla volta. I nuovi messaggi sovrascrivono i precedenti. |
|
La classe propagator_block è una classe base astratta per blocchi di messaggio che sono sia origine sia destinazione. Combina la funzionalità delle classi source_block e target_block. |
|
Un blocco reader-writer basato sulla coda di preferenza writer con solo spin locale. Il blocco concede l'accesso FIFO (first in - first out) a writer e può essere dannoso per i reader in condizioni di continuo caricamento di writer. |
|
Consente di rappresentare un'astrazione per un gruppo di pianificazione. I gruppi di pianificazione organizzano un set di lavoro correlato che trae vantaggio da una chiusura pianificata a livello temporaneo, eseguendo un'altra attività nello stesso gruppo prima di spostarsi in un altro gruppo, o a livello spaziale, eseguendo più elementi all'interno dello stesso gruppo sullo stesso nodo NUMA o sul socket fisico. |
|
Consente di rappresentare un'astrazione per un'utilità di pianificazione del runtime di concorrenza. |
|
Questa classe descrive un'eccezione generata ogni qualvolta viene eseguita un'operazione che richiede un'utilità di pianificazione da allegare al contesto corrente e non lo è. |
|
Questa classe descrive un'eccezione generata a causa dell'errore per acquisire una risorsa critica nel runtime di concorrenza. |
|
La classe SchedulerPolicy contiene un set di coppie chiave/valore, uno per ogni elemento dei criteri, che controllano il comportamento di un'istanza dell'utilità di pianificazione. |
|
Un blocco della messaggistica single_assignment è un propagator_block multi-origine, a destinazione singola, in grado di archiviare un unico message di sola scrittura. |
|
L'oggetto single_link_registry è un network_link_registry che gestisce solo un singolo blocco di origine o di destinazione. |
|
La classe source_block è una classe base astratta per blocchi di sola origine. La classe fornisce funzionalità di gestione dei collegamenti di base come controlli dell'errore comune. |
|
L'oggetto source_link_manager gestisce i collegamenti di rete dei blocchi della messaggistica nei blocchi ISource. |
|
La classe structured_task_group rappresenta un insieme altamente strutturato di lavoro parallelo. È possibile mettere in coda attività parallele singole a un structured_task_group utilizzando gli oggetti task_handle e attenderne il completamento o annullamento del gruppo di attività prima di aver terminato l'esecuzione, che interromperà qualsiasi attività che non ha iniziato l'esecuzione. |
|
La classe target_block corrisponde a una classe base astratta che mette a disposizione la funzionalità di gestione dei collegamenti di base e il controllo degli errori per blocchi di sola destinazione. |
|
La classe task_group rappresenta un insieme di lavoro parallelo che può essere messo in attesa o annullato. |
|
La classe task_handle rappresenta un elemento di lavoro parallelo individuale. Incapsula le istruzioni e i dati richiesti per eseguire un lavoro. |
|
Un blocco della messaggistica timer è un source_block in grado di inviare un messaggio alla sua destinazione dopo che è trascorso un determinato periodo di tempo oppure ad intervalli specifici. |
|
Un blocco della messaggistica transformer è un propagator_block multi-origine, a destinazione singola, che può accettare messaggi di un tipo ed è in grado di archiviare un numero non associato di messaggi di un tipo diverso. |
|
Un blocco della messaggistica unbounded_buffer è un propagator_block multi-origine a destinazione singola, in grado di archiviare un numero non associato di messaggi di un tipo diverso. |
|
Questa classe descrive un'eccezione generata ogni qualvolta viene utilizzato un sistema operativo non supportato. Il runtime di concorrenza non supporta sistemi operativi precedenti a Windows XP con Service Pack 3. |
Strutture
Nome |
Oggetto di descrizione |
---|---|
La struttura DispatchState è utilizzata per trasferire lo stato al metodo IExecutionContext::Dispatch. Descrive le circostanze in cui il metodo Dispatch viene richiamato su un'interfaccia IExecutionContext. |
|
Un'interfaccia a un contesto di esecuzione che può essere in esecuzione su un processore virtuale specificato e il cui contesto può essere cambiato cooperativamente. |
|
Un'astrazione per un thread di hardware. |
|
Un'interfaccia alla Gestione risorse del runtime di concorrenza. Si tratta dell'interfaccia con cui le utilità di pianificazione comunicano con Gestione risorse. |
|
Un'interfaccia a un'astrazione di un'utilità di pianificazione del lavoro. Gestione risorse del runtime di concorrenza utilizza tale interfaccia per comunicare con le utilità di pianificazione del lavoro. |
|
Interfaccia con cui le utilità di pianificazione comunicano con Gestione risorse del runtime di concorrenza per negoziare l'allocazione delle risorse. |
|
Astrazione per un thread di esecuzione. A seconda della chiave di criteri SchedulerType dell'utilità di pianificazione che si crea, la Gestione risorse concederà un proxy del thread appoggiato da un thread Win32 normale o un thread UMS in modalità utente. I thread UMS sono supportati su sistemi operativi a 64 bit con Windows versione 7 e successive. |
|
Consente di rappresentare un elenco di completamento UMS. Quando si blocca il thread UMS, il contesto di pianificazione definito dell'utilità di pianificazione viene inviato per decidere cosa pianificare sulla radice del processore virtuale sottostante mentre il thread originale è bloccato. Quando il thread originale si sblocca, il sistema operativo lo mette in coda nell'elenco di completamento accessibile tramite l'interfaccia. L'utilità di pianificazione può eseguire una query nell'elenco di completamento sul contesto di pianificazione designato o in qualsiasi altra posizione alla ricerca di lavoro. |
|
Un'interfaccia a un'astrazione di un'utilità di pianificazione di lavoro che desidera che la Gestione risorse del runtime di concorrenza passi thread UMS in modalità utente schedulable. Gestione risorse utilizza questa interfaccia per comunicare con le utilità di pianificazione del thread UMS. L'interfaccia IUMSScheduler eredita dall'interfaccia IScheduler. |
|
Astrazione per un thread di esecuzione. Se si desidera che all'utilità di pianificazione siano concessi thread UMS, impostare il valore per l'elemento dei criteri dell'utilità di pianificazione SchedulerKind su UmsThreadDefault e implementare l'interfaccia IUMSScheduler. I thread UMS sono supportati solo su sistemi operativi a 64 bit con Windows versione 7 e successive. |
|
Consente di rappresentare una notifica da Gestione risorse che un proxy del thread, che ha bloccato e attivato un valore restituito al contesto di pianificazione definito dell'utilità di pianificazione, ha sbloccato ed è pronto per essere pianificato. Questa interfaccia non è valida una volta riprogrammato il contesto di esecuzione associato del proxy del thread, restituito dal metodo GetContext. |
|
Un'astrazione per un thread di hardware sulla quale può eseguire un proxy del thread. |
Enumerazioni
Nome |
Oggetto di descrizione |
---|---|
Stati validi per un agent. |
|
Tipi di eventi che possono essere tracciati mediante la funzionalità di tracciatura offerta dal runtime di concorrenza. |
|
Tipo di area critica in cui si trova un contesto. |
|
Utilizzato dai criteri DynamicProgressFeedback per descrivere se le risorse per l'utilità di pianificazione saranno ribilanciate sulla base di informazioni statistiche raccolte dall'utilità di pianificazione o solo sulla base di processori virtuali che passano allo stato inattivo e viceversa tramite chiamate ai metodi Activate e Deactivate sull'interfaccia IVirtualProcessorRoot. Per ulteriori informazioni sui criteri dell'utilità di pianificazione disponibili, vedere Enumerazione PolicyElementKey. |
|
Tipo di un blocco della messaggistica join. |
|
Risposte valide per un'offerta di un oggetto message a un blocco. |
|
Chiavi dei criteri che descrivono aspetti del comportamento dell'utilità di pianificazione. Ciascun elemento dei criteri è descritto da una coppia chiave-valore. Per ulteriori informazioni sui criteri dell'utilità di pianificazione e l'impatto nelle utilità di pianificazione, vedere Utilità di pianificazione (runtime di concorrenza). |
|
Utilizzato dai criteri SchedulerKind per descrivere il tipo di thread che l'utilità di pianificazione deve utilizzare per i contesti di esecuzione sottostanti. Per ulteriori informazioni sui criteri dell'utilità di pianificazione disponibili, vedere Enumerazione PolicyElementKey. |
|
Utilizzato dai criteri SchedulingProtocol per descrivere quale algoritmo di pianificazione sarà utilizzato per l'utilità di pianificazione. Per ulteriori informazioni sui criteri dell'utilità di pianificazione disponibili, vedere Enumerazione PolicyElementKey. |
|
Utilizzato per indicare lo stato in cui si trova un proxy del thread, quando è in esecuzione uno scambio di contesto cooperativo per un proxy del thread diverso. |
|
Descrive lo stato di esecuzione di un oggetto task_group o structured_task_group. Un valore di questo tipo viene restituito da numerosi metodi che attendono le attività pianificate a un gruppo di attività da completare. |
Funzioni
Nome |
Oggetto di descrizione |
---|---|
Metodo di overload. Un'operazione di invio asincrona che pianifica un'attività per propagare i dati nel blocco di destinazione. |
|
Metodo di overload. Costruisce un blocco della messaggistica choice da uno Scheduler o ScheduleGroup facoltativo con un numero di origini di input compreso tra due e dieci. |
|
Metodo di overload. Costruisce un blocco della messaggistica greedy multitype_join da uno Scheduler o ScheduleGroup facoltativo con un numero di origini di input compreso tra due e dieci. |
|
Metodo di overload. Costruisce un blocco della messaggistica non_greedy multitype_join da uno Scheduler o ScheduleGroup facoltativo con un numero di origini di input compreso tra due e dieci. |
|
Un metodo factory per la creazione di un oggetto task_handle. |
|
Metodo di overload. parallel_for scorre un intervallo di indici ed esegue una funzione fornita dall'utente a ogni iterazione, in parallelo. |
|
parallel_for_each applica una funzione specificata a ogni elemento all'interno di un intervallo, in parallelo. È semanticamente equivalente alla funzione for_each nello spazio dei nomi std, con l'eccezione che l'iterazione sugli elementi viene eseguita in parallelo e l'ordine di iterazione non è specificato. L'argomento _Func deve supportare un operatore di chiamata della funzione del form operator()(T) laddove il parametro T è il tipo di elemento del contenitore su cui viene eseguita l'iterazione. |
|
Metodo di overload. Esegue gli oggetti funzione forniti come parametri in parallelo e blocca fino al termine dell'esecuzione. Ogni oggetto funzione potrebbe essere un'espressione lambda, un puntatore a funzione o qualsiasi oggetto che supporta l'operatore della chiamata di funzione con la firma void operator()(). |
|
Metodo di overload. Un'implementazione di ricezione generale, che consente a un contesto di attendere i dati esattamente da un'origine e di filtrare i valori accettati. |
|
Metodo di overload. Un'operazione di invio sincrona che attende fino a quando la destinazione accetta o rifiuta il messaggio. |
|
Scambia gli elementi di due oggetti concurrent_vector. |
|
Metodo di overload. Un'implementazione di ricezione try generale, che consente a un contesto di cercare i dati esattamente da un'origine e di filtrare i valori accettati. Se i dati non sono pronti, il metodo restituirà false. |
Operatori
Nome |
Oggetto di descrizione |
---|---|
Consente di verificare se l'oggetto concurrent_vector sul lato sinistro dell'operatore non è uguale all'oggetto concurrent_vector sul lato destro. |
|
Consente di verificare se l'oggetto concurrent_vector sul lato sinistro dell'operatore è minore dell'oggetto concurrent_vector sul lato destro. |
|
Consente di verificare se l'oggetto concurrent_vector sul lato sinistro dell'operatore è minore o uguale all'oggetto concurrent_vector sul lato destro. |
|
Consente di verificare se l'oggetto concurrent_vector sul lato sinistro dell'operatore è uguale all'oggetto concurrent_vector sul lato destro. |
|
Consente di verificare se l'oggetto concurrent_vector sul lato sinistro dell'operatore è maggiore dell'oggetto concurrent_vector sul lato destro. |
|
Consente di verificare se l'oggetto concurrent_vector sul lato sinistro dell'operatore è maggiore o uguale all'oggetto concurrent_vector sul lato destro. |
Costanti
Nome |
Oggetto di descrizione |
---|---|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati ad attività di routine o attività. |
|
GUID del provider ETW per il runtime di concorrenza. |
|
Indica supporto dell'interfaccia Gestione risorse definito in Visual Studio 2010. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che non sono descritti in maniera più specifica da un'altra categoria. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati a contesti. |
|
Valore indicante un'attesa che non deve terminare mai. |
|
Valore indicante un'attesa terminata. |
|
Valore speciale per le chiavi dei criteri ContextPriority che indicano che la priorità del thread di tutti i contesti nell'utilità di pianificazione deve essere identica a quella del thread che ha creato l'utilità di pianificazione. |
|
GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza direttamente correlati ai blocchi. |
|
Valore speciale per le chiavi dei criteri MinConcurrency e MaxConcurrency. Viene meno al numero di thread di hardware sul computer nell'assenza di altri vincoli. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati all'uso della funzione parallel_for_each. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati all'uso della funzione parallel_for. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati all'uso della funzione parallel_invoke. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati al gestore delle risorse. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati a gruppi di pianificazione. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati all'attività dell'utilità di pianificazione. |
|
Una GUID di categoria che descrive eventi ETW generati dal runtime di concorrenza che sono direttamente correlati a processori virtuali. |
Requisiti
Intestazione: agents.h, concrt.h, concrtrm.h, concurrent_queue.h, concurrent_vector.h, ppl.h