Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Astrazione per un thread di esecuzione. Per fare in modo che il tuo schedulatore possa utilizzare thread utente (UMS), imposta il valore per l'elemento della politica dello schedulatore SchedulerKind su UmsThreadDefault e implementa l'interfaccia IUMSScheduler. I thread UMS sono supportati solo su sistemi operativi a 64 bit con Windows 7 e versioni successive.
Sintassi
struct IUMSThreadProxy : public IThreadProxy;
Membri
Metodi pubblici
| Nome | Descrizione |
|---|---|
| IUMSThreadProxy::EnterCriticalRegion | Chiamato per immettere un'area critica. Quando si trova all'interno di una regione critica, lo schedulatore non osserverà le operazioni di blocco asincrone che si verificano durante quella regione. Per un thread UMS, ciò significa che il pianificatore non verrà richiamato per errori di pagina, sospensioni di thread, chiamate di procedura asincrona del kernel (APC) e così via. |
| IUMSThreadProxy::EnterHyperCriticalRegion | Chiamato con l'intento di entrare in un'area ipercritica. Quando si trova all'interno di un'area ipercritica, l'utilità di pianificazione non osserverà alcuna operazione di blocco che si verifica durante l'area. Pertanto l'utilità di pianificazione non sarà nuovamente immessa per bloccare le chiamate di funzione, i tentativi di acquisizione di blocchi tramite cui vengono eseguiti blocchi, gli errori di pagina, le sospensioni di thread, le chiamate asincrone di procedura del kernel (APC, Asynchronous Procedure Call) e così via, per un thread UMS. |
| IUMSThreadProxy::ExitCriticalRegion | Chiamato per uscire da un'area critica. |
| IUMSThreadProxy::ExitHyperCriticalRegion | Chiamato per uscire da un'area ipercritica. |
| IUMSThreadProxy::GetCriticalRegionType | Restituisce il tipo di regione critica in cui si trova il proxy del thread. Poiché le aree ipercritiche sono un insieme sovrastante delle aree critiche, se il codice è entrato in un'area critica e poi in un'area ipercritica, verrà restituito InsideHyperCriticalRegion. |
Gerarchia di ereditarietà
IUMSThreadProxy
Requisiti
Intestazione: concrtrm.h
Spazio dei nomi: Concurrency
Metodo IUMSThreadProxy::EnterCriticalRegion
Chiamato per accedere a un'area critica. Quando si trova all'interno di una regione critica, il pianificatore non osserverà le operazioni di blocco asincrone che si verificano all'interno della regione. Ciò significa che il pianificatore non verrà coinvolto nuovamente per errori di pagina, sospensioni di thread, chiamate di routine asincrone del kernel (APC), eccetera, per un thread UMS.
virtual int EnterCriticalRegion() = 0;
Valore restituito
Nuova profondità dell'area critica. Le aree critiche sono reentranti.
Metodo IUMSThreadProxy::EnterHyperCriticalRegion
Chiamato per entrare in un'area ipercritica. Quando si trova all'interno di un'area ipercritica, lo scheduler non rileverà alcuna operazione di blocco che avviene durante tale area. Pertanto lo scheduler non sarà nuovamente chiamato per le chiamate di funzione bloccanti, i tentativi di acquisizione di lock che bloccano, i page fault, le sospensioni di thread, le chiamate di procedura asincrona del kernel (APCs) e così via, per un thread UMS.
virtual int EnterHyperCriticalRegion() = 0;
Valore restituito
Nuova profondità dell'area ipercritica. Le aree ipercritiche sono rientranti.
Osservazioni:
Il pianificatore deve essere straordinariamente attento ai metodi che chiama e ai blocchi che acquisisce in queste regioni. Se il codice in un'area di questo tipo si blocca su un lock gestito da un elemento di cui l'utilità di pianificazione è responsabile, potrebbe verificarsi un deadlock.
Metodo IUMSThreadProxy::ExitCriticalRegion
Chiamato per uscire da un'area critica.
virtual int ExitCriticalRegion() = 0;
Valore restituito
Nuova profondità dell'area critica. Le aree critiche sono reentranti.
Metodo IUMSThreadProxy::ExitHyperCriticalRegion
Chiamato per uscire da un'area ipercritica.
virtual int ExitHyperCriticalRegion() = 0;
Valore restituito
Nuova profondità dell'area ipercritica. Le aree ipercritiche sono rientranti.
Metodo IUMSThreadProxy::GetCriticalRegionType
Restituisce quale tipo di regione critica è presente nel proxy del thread. Poiché le regioni ipercritiche sono un superset delle regioni critiche, se il codice è entrato in una regione critica e poi in una regione ipercritica, verrà restituito InsideHyperCriticalRegion.
virtual CriticalRegionType GetCriticalRegionType() const = 0;
Valore restituito
Il tipo di area critica in cui si trova il proxy del thread.