Sdílet prostřednictvím


IVirtualProcessorRoot – struktura

Abstrakce hardwarového vlákna, na kterém může být spuštěn proxy vlákno.

Syntaxe

struct IVirtualProcessorRoot : public IExecutionResource;

Členové

Veřejné metody

Název Popis
IVirtualProcessorRoot::Activate Způsobí, že proxy vlákna přidružené k rozhraní pContext kontextu spuštění se spustí v tomto kořenovém adresáři virtuálního procesoru.
IVirtualProcessorRoot::D aktivace Způsobí, že proxy vlákna aktuálně spuštěný v tomto kořenovém adresáři virtuálního procesoru přestane odesílat kontext spuštění. Proxy vlákno bude pokračovat v provádění volání Activate metody.
IVirtualProcessorRoot::EnsureAllTasksVisible Způsobí, že data uložená v hierarchii paměti jednotlivých procesorů budou viditelná pro všechny procesory v systému. Zajišťuje, že se na všech procesorech před vrácením metody spustí plot plné paměti.
IVirtualProcessorRoot::GetId Vrátí jedinečný identifikátor kořenového adresáře virtuálního procesoru.

Poznámky

Každý kořen virtuálního procesoru má přidružený spouštěcí prostředek. Rozhraní IVirtualProcessorRoot dědí z rozhraní IExecutionResource . Více kořenových virtuálních procesorů může odpovídat stejnému základnímu hardwarovému vláknu.

Resource Manager uděluje kořenovým certifikátům virtuálního procesoru plánovačům v reakci na požadavky na prostředky. Plánovač může k provádění práce použít kořen virtuálního procesoru aktivací s kontextem spuštění.

Hierarchie dědičnosti

IExecutionResource

IVirtualProcessorRoot

Požadavky

Hlavička: concrtrm.h

Namespace: souběžnost

IVirtualProcessorRoot::Activate – metoda

Způsobí, že proxy vlákna přidružené k rozhraní pContext kontextu spuštění se spustí v tomto kořenovém adresáři virtuálního procesoru.

virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;

Parametry

pContext
Rozhraní pro kontext spuštění, který bude odeslán v tomto kořenovém adresáři virtuálního procesoru.

Poznámky

Resource Manager poskytne proxy vlákno, pokud není přidružený k rozhraní kontextu spuštění. pContext

Tuto Activate metodu lze použít ke spuštění práce na novém kořenovém adresáři virtuálního procesoru vráceného Resource Managerem nebo k obnovení proxy vlákna v kořenovém adresáři virtuálního procesoru, který byl deaktivován nebo se chystá deaktivovat. Další informace o deaktivaci najdete v tématu IVirtualProcessorRoot::D eactivate . Při obnovení deaktivovaného kořenového adresáře virtuálního procesoru musí být parametr pContext stejný jako parametr použitý k deaktivaci kořenového adresáře virtuálního procesoru.

Jakmile se kořen virtuálního procesoru poprvé aktivuje, další dvojice volání Deactivate a Activate mohou mezi sebou závodit. To znamená, že je přijatelné, aby Resource Manager obdržel volání Activate před tím, než přijme Deactivate volání, pro které byl určen.

Při aktivaci kořenového adresáře virtuálního procesoru signalizujete Resource Manageru, že tento kořen virtuálního procesoru je momentálně zaneprázdněný prací. Pokud plánovač nemůže najít žádnou práci, která by se spustila v tomto kořenovém adresáři, očekává se, že vyvolá metodu Deactivate informující o tom, že kořen virtuálního procesoru je nečinný. Resource Manager používá tato data k vyrovnávání zatížení systému.

invalid_argument je vyvolán, pokud argument pContext má hodnotu NULL.

invalid_operation je vyvolána, pokud argument pContext nepředstavuje kontext spuštění, který byl naposledy odeslán tímto kořenovým serverem virtuálního procesoru.

Aktivace kořenového adresáře virtuálního procesoru zvýší úroveň předplatného základního hardwarového vlákna o jednu. Další informace o úrovních předplatného najdete v tématu IExecutionResource::CurrentSubscriptionLevel.

IVirtualProcessorRoot::D eactivate – metoda

Způsobí, že proxy vlákna aktuálně spuštěný v tomto kořenovém adresáři virtuálního procesoru přestane odesílat kontext spuštění. Proxy vlákno bude pokračovat v provádění volání Activate metody.

virtual bool Deactivate(_Inout_ IExecutionContext* pContext) = 0;

Parametry

pContext
Kontext, který právě odesílá tento kořenový adresář.

Návratová hodnota

Logická hodnota. Hodnota true označuje, že proxy vlákna vráceno z Deactivate metody v reakci na volání Activate metody. Hodnota false značí, že proxy vlákna vrácené z metody v reakci na událost oznámení v Resource Manageru. V plánovači vláken v režimu uživatele (UMS) to znamená, že položky se zobrazily v seznamu dokončení plánovače a plánovač je nutný ke zpracování.

Poznámky

Tuto metodu použijte k dočasnému zastavení spouštění kořenového adresáře virtuálního procesoru, pokud v plánovači nemůžete najít žádnou práci. Volání Deactivate metody musí pocházet z Dispatch metody kontextu spuštění, se kterým byl naposledy aktivován kořen virtuálního procesoru. Jinými slovy, proxy vlákna vyvolání Deactivate metody musí být ten, který se aktuálně spouští v kořenovém adresáři virtuálního procesoru. Volání metody v kořenovém adresáři virtuálního procesoru, na který se nespouštějí, může způsobit nedefinované chování.

Deaktivovaný kořen virtuálního procesoru může být vyvolána voláním Activate metody se stejným argumentem, který byl předán metodě Deactivate . Plánovač zodpovídá za zajištění spárování volání Activate metod a Deactivate metod, ale není nutné je přijímat v určitém pořadí. Resource Manager dokáže zpracovat příjem volání metody Activate předtím, než přijme volání metody, Deactivate pro kterou byla určena.

Pokud se kořen virtuálního procesoru probouzí a návratová hodnota z Deactivate metody je hodnota false, plánovač by měl dotazovat seznam dokončení UMS prostřednictvím IUMSCompletionList::GetUnblockNotifications metody, jednat na dané informace a následně metodu Deactivate znovu volat. To by se mělo opakovat, dokud metoda Deactivate nevrátí hodnotu true.

invalid_argument je vyvolán, pokud má argument pContext hodnotu NULL.

invalid_operation je vyvolána, pokud se kořen virtuálního procesoru nikdy neaktivoval nebo argument pContext nepředstavuje kontext spuštění, který byl naposledy odeslán tímto kořenovým serverem virtuálního procesoru.

Deaktivace kořenového adresáře virtuálního procesoru sníží úroveň předplatného základního hardwarového vlákna o jednu. Další informace o úrovních předplatného najdete v tématu IExecutionResource::CurrentSubscriptionLevel.

IVirtualProcessorRoot::EnsureAllTasksVisible – metoda

Způsobí, že data uložená v hierarchii paměti jednotlivých procesorů budou viditelná pro všechny procesory v systému. Zajišťuje, že se na všech procesorech před vrácením metody spustí plot plné paměti.

virtual void EnsureAllTasksVisible(_Inout_ IExecutionContext* pContext) = 0;

Parametry

pContext
Kontext, který právě odesílá tento kořenový server virtuálního procesoru.

Poznámky

Tato metoda může být užitečná, když chcete synchronizovat deaktivaci kořenového adresáře virtuálního procesoru s přidáním nové práce do plánovače. Z důvodů výkonu se můžete rozhodnout přidat pracovní položky do plánovače bez spuštění paměťové bariéry, což znamená, že pracovní položky přidané vláknem spuštěným na jednom procesoru nejsou okamžitě viditelné pro všechny ostatní procesory. Použitím této metody ve spojení s metodou Deactivate můžete zajistit, že plánovač neaktivuje všechny jeho kořeny virtuálního procesoru, zatímco pracovní položky existují v kolekcích plánovače.

Volání EnsureAllTasksVisibleThe metody musí pocházet z Dispatch metody kontextu spuštění, se kterým byl naposledy aktivován kořen virtuálního procesoru. Jinými slovy, proxy vlákna vyvolání EnsureAllTasksVisible metody musí být ten, který se aktuálně spouští v kořenovém adresáři virtuálního procesoru. Volání metody v kořenovém adresáři virtuálního procesoru, na který se nespouštějí, může způsobit nedefinované chování.

invalid_argument je vyvolán, pokud argument pContext má hodnotu NULL.

invalid_operation je vyvolána, pokud se kořen virtuálního procesoru nikdy neaktivoval nebo argument pContext nepředstavuje kontext spuštění, který byl naposledy odeslán tímto kořenovým serverem virtuálního procesoru.

IVirtualProcessorRoot::GetId – metoda

Vrátí jedinečný identifikátor kořenového adresáře virtuálního procesoru.

virtual unsigned int GetId() const = 0;

Návratová hodnota

Celočíselné identifikátory.

Viz také

concurrency – obor názvů