Structuur IVirtualProcessorRoot

Een abstractie voor een hardwarethread waarop een threadproxy kan worden uitgevoerd.

Syntaxis

struct IVirtualProcessorRoot : public IExecutionResource;

Leden

Openbare methoden

Naam Description
IVirtualProcessorRoot::Activate Zorgt ervoor dat de thread-proxy die gekoppeld is aan de uitvoeringscontext-interface pContext, begint te werken op deze virtuele processorkern.
IVirtualProcessorRoot::Deactivate Zorgt ervoor dat de threadproxy die momenteel wordt uitgevoerd op deze hoofdmap van de virtuele processor, stopt met het verzenden van de uitvoeringscontext. De threadproxy wordt hervat met het uitvoeren van een aanroep naar de Activate methode.
IVirtualProcessorRoot::EnsureAllTasksVisible Zorgt ervoor dat gegevens die zijn opgeslagen in de geheugenhiërarchie van afzonderlijke processors zichtbaar worden voor alle processors in het systeem. Het zorgt ervoor dat er een volledige geheugenbarrière is uitgevoerd op alle processors voordat de methode terugkeert.
IVirtualProcessorRoot::GetId Retourneert een unieke id voor de virtuele processorwortel.

Opmerkingen

Elke virtuele processorwortel heeft een bijbehorende verwerkingsbron. De IVirtualProcessorRoot interface neemt over van de IExecutionResource-interface . Meerdere hoofdmappen van de virtuele processor kunnen overeenkomen met dezelfde onderliggende hardwarethread.

Resource Manager verleent virtuele processorwortels aan planners als reactie op aanvragen voor resources. Een scheduler kan een virtuele processorwortel gebruiken om werk uit te voeren door deze te activeren met een uitvoeringscontext.

Overnamehiërarchie

IExecutionResource

IVirtualProcessorRoot

Requirements

Koptekst: concrtrm.h

Naamruimte: concurrentie

Methode IVirtualProcessorRoot::Activate

Zorgt ervoor dat de thread-proxy die is gekoppeld aan de uitvoeringscontext-interface pContext begint met uitvoeren op deze virtuele processor-root.

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

Parameterwaarden

pContext
Een interface naar de uitvoeringscontext die zal worden uitgevoerd op de root van deze virtuele processor.

Opmerkingen

Resource Manager levert een threadproxy als deze niet is gekoppeld aan de interface voor de uitvoeringscontext pContext

De Activate methode kan worden gebruikt om te beginnen met het uitvoeren van werk op een nieuwe hoofdmap van een virtuele processor die wordt geretourneerd door Resource Manager, of om de threadproxy te hervatten op een virtuele processorhoofdmap die is gedeactiveerd of op het punt staat te deactiveren. Zie IVirtualProcessorRoot::D eactivate voor meer informatie over deactiveren. Wanneer u een gedeactiveerde hoofdmap van een virtuele processor hervat, moet de parameter hetzelfde zijn als de parameter pContext die wordt gebruikt om de hoofdmap van de virtuele processor te deactiveren.

Zodra een virtuele processorroot voor het eerst is geactiveerd, kunnen daaropvolgende paar aanroepen naar Deactivate en Activate gelijktijdig optreden. Dit betekent dat de resource manager een oproep kan Activate ontvangen voordat deze de Deactivate aanroep ontvangt waarvoor het bedoeld is.

Wanneer u een virtuele processorwortel activeert, meldt u aan het Resourcebeheer dat deze virtuele processorwortel momenteel bezig is met werk. Als uw scheduler geen werk kan vinden om uit te voeren op deze hoofdmap, wordt verwacht dat deze de Deactivate methode aanroept die de Resource Manager informeert dat de hoofdmap van de virtuele processor niet actief is. Resource Manager gebruikt deze gegevens om de taakverdeling van het systeem te verdelen.

invalid_argument wordt gegenereerd als het argument pContext de waarde NULLheeft.

invalid_operation wordt gegenereerd als het argument pContext niet de verwerkingscontext vertegenwoordigt die het laatst is toegewezen door de verwerkingswortel van deze virtuele processor.

Het activeren van een wortel van een virtuele processor verhoogt het abonnementsniveau van de onderliggende hardwarethread met één. Zie IExecutionResource::CurrentSubscriptionLevel voor meer informatie over abonnementsniveaus.

Methode IVirtualProcessorRoot::Deactivate

Zorgt ervoor dat de threadproxy die momenteel wordt uitgevoerd op deze hoofdmap van de virtuele processor, stopt met het verzenden van de uitvoeringscontext. De thread-proxy zal de uitvoering hervatten bij een aanroep naar de Activate methode.

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

Parameterwaarden

pContext
De context die momenteel wordt afgehandeld door deze root.

Retourwaarde

Een Booleaanse waarde. Een waarde van true geeft aan dat de threadproxy is geretourneerd vanuit de Deactivate methode als reactie op een aanroep naar de Activate methode. Een waarde van false geeft aan dat de threadproxy is geretourneerd vanuit de methode als reactie op een meldingsgebeurtenis in Resource Manager. Bij een UMS-threadplanner (user-mode schedulable) geeft dit aan dat items in de planner's voltooiingslijst zijn verschenen en dat de planner ze moet verwerken.

Opmerkingen

Gebruik deze methode om tijdelijk het proces van een virtuele processorkern te onderbreken als er geen werk is in uw taakbeheer. Een aanroep naar de Deactivate methode moet afkomstig zijn uit de Dispatch methode van de uitvoeringscontext waarmee de hoofdmap van de virtuele processor voor het laatst is geactiveerd. Met andere woorden, de threadproxy die de Deactivate methode aanroept, moet de methode zijn die momenteel wordt uitgevoerd op de hoofdmap van de virtuele processor. Als u de methode aanroept op een hoofdmap van een virtuele processor waarop u niet uitvoert, kan dit leiden tot niet-gedefinieerd gedrag.

Een gedeactiveerde virtuele processor root kan worden geactiveerd door een aanroep naar de Activate methode, met hetzelfde argument dat is doorgegeven aan de Deactivate methode. De planner is verantwoordelijk voor het garanderen dat aanroepen naar de Activate en Deactivate methoden worden gekoppeld, maar ze hoeven niet in een specifieke volgorde te worden ontvangen. Resource Manager kan het ontvangen van een aanroep naar de Activate methode afhandelen voordat deze een aanroep ontvangt naar de Deactivate methode waarvoor deze is bedoeld.

Als een virtuele processorkern ontwaakt en de retourwaarde van de Deactivate methode de waarde false is, moet de scheduler een query uitvoeren op de UMS-voltooiingslijst via de IUMSCompletionList::GetUnblockNotifications methode, de opgevraagde informatie verwerken en vervolgens de Deactivate methode opnieuw aanroepen. Dit moet worden herhaald totdat de Deactivate methode de waarde trueretourneert.

invalid_argument wordt gegenereerd als het argument pContext de waarde NULL heeft.

invalid_operation wordt gegenereerd als de hoofdmap van de virtuele processor nooit is geactiveerd of het argument pContext niet de uitvoeringscontext vertegenwoordigt die het laatst is verzonden door de hoofdmap van deze virtuele processor.

Het deactiveren van een virtuele processorwortel vermindert het abonnementsniveau van de onderliggende hardwarethread met één. Zie IExecutionResource::CurrentSubscriptionLevel voor meer informatie over abonnementsniveaus.

Methode IVirtualProcessorRoot::EnsureAllTasksVisible

Zorgt ervoor dat gegevens die zijn opgeslagen in de geheugenhiërarchie van afzonderlijke processors zichtbaar worden voor alle processors in het systeem. Het zorgt ervoor dat er een volledige geheugenbarrière is uitgevoerd op alle processors voordat de methode terugkeert.

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

Parameterwaarden

pContext
De context die momenteel wordt verwerkt door de hoofdeenheid van deze virtuele processor.

Opmerkingen

Deze methode kan nuttig zijn wanneer u deactivering van een processorroot van een virtuele processor wilt synchroniseren met de toevoeging van nieuw werk in de scheduler. Om prestatieredenen kunt u besluiten werkitems toe te voegen aan uw planner zonder een geheugenbarrière uit te voeren, wat betekent dat werkitems die door een thread die op één processor worden uitgevoerd, niet onmiddellijk zichtbaar zijn voor alle andere processors. Door deze methode te gebruiken in combinatie met de Deactivate methode, kunt u ervoor zorgen dat uw planner niet alle roots van de virtuele processor deactiveert terwijl werkitems aanwezig zijn in de verzamelingen van uw planner.

Een aanroep naar de EnsureAllTasksVisibleThe methode moet afkomstig zijn uit de Dispatch methode van de uitvoeringscontext waarmee de hoofdmap van de virtuele processor voor het laatst is geactiveerd. Met andere woorden, de threadproxy die de EnsureAllTasksVisible methode aanroept, moet de methode zijn die momenteel wordt uitgevoerd op de hoofdmap van de virtuele processor. Als u de methode aanroept op een hoofdmap van een virtuele processor waarop u niet uitvoert, kan dit leiden tot niet-gedefinieerd gedrag.

invalid_argument wordt gegenereerd als het argument pContext de waarde NULLheeft.

invalid_operation wordt gegenereerd als de hoofdmap van de virtuele processor nooit is geactiveerd of het argument pContext niet de uitvoeringscontext vertegenwoordigt die het laatst is verzonden door de hoofdmap van deze virtuele processor.

Methode IVirtualProcessorRoot::GetId

Retourneert een unieke id voor de virtuele processorwortel.

virtual unsigned int GetId() const = 0;

Retourwaarde

Een geheel getal-id.

Zie ook

concurrentie Namespace