Udostępnij za pośrednictwem


IVirtualProcessorRoot — Struktura

Abstrakcja wątku sprzętowego, na którym może być wykonywany serwer proxy wątku.

Składnia

struct IVirtualProcessorRoot : public IExecutionResource;

Członkowie

Metody publiczne

Nazwa/nazwisko opis
IVirtualProcessorRoot::Activate Powoduje, że serwer proxy wątku skojarzony z interfejsem pContext kontekstu wykonywania rozpoczyna wykonywanie na tym katalogu głównym procesora wirtualnego.
IVirtualProcessorRoot::D eactivate Powoduje, że serwer proxy wątku jest obecnie wykonywany w tym katalogu głównym procesora wirtualnego, aby zatrzymać wysyłanie kontekstu wykonywania. Serwer proxy wątku wznowi wykonywanie wywołania Activate metody .
IVirtualProcessorRoot::EnsureAllTasksVisible Powoduje, że dane przechowywane w hierarchii pamięci poszczególnych procesorów stają się widoczne dla wszystkich procesorów w systemie. Gwarantuje to wykonanie pełnego ogrodzenia pamięci na wszystkich procesorach przed zwróceniem metody.
IVirtualProcessorRoot::GetId Zwraca unikatowy identyfikator katalogu głównego procesora wirtualnego.

Uwagi

Każdy katalog główny procesora wirtualnego ma skojarzony zasób wykonywania. Interfejs IVirtualProcessorRoot dziedziczy z interfejsu IExecutionResource . Wiele katalogów głównych procesorów wirtualnych może odpowiadać temu samemu bazowemu wątkowi sprzętowemu.

Usługa Resource Manager udziela katalogów głównych procesorów wirtualnych harmonogramom w odpowiedzi na żądania dotyczące zasobów. Harmonogram może używać głównego procesora wirtualnego do wykonania pracy przez aktywowanie go z kontekstem wykonywania.

Hierarchia dziedziczenia

IExecutionResource

IVirtualProcessorRoot

Wymagania

Nagłówek: concrtrm.h

Przestrzeń nazw: współbieżność

IVirtualProcessorRoot::Activate — Metoda

Powoduje, że serwer proxy wątku skojarzony z interfejsem pContext kontekstu wykonywania rozpoczyna wykonywanie na tym katalogu głównym procesora wirtualnego.

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

Parametry

Pcontext
Interfejs kontekstu wykonywania, który zostanie wysłany w tym katalogu głównym procesora wirtualnego.

Uwagi

Usługa Resource Manager dostarczy serwer proxy wątku, jeśli nie jest skojarzony z interfejsem kontekstu wykonywania pContext

Metody Activate można użyć do rozpoczęcia wykonywania pracy na nowym katalogu głównym procesora wirtualnego zwróconym przez usługę Resource Manager lub wznowić serwer proxy wątku w katalogu głównym procesora wirtualnego, który został dezaktywowany lub ma zostać dezaktywowany. Aby uzyskać więcej informacji na temat dezaktywacji, zobacz IVirtualProcessorRoot::D eactivate . W przypadku wznowienia dezaktywowanego katalogu głównego procesora wirtualnego parametr musi być taki sam jak parametr pContext używany do dezaktywowania katalogu głównego procesora wirtualnego.

Po pierwszym aktywowaniu katalogu głównego procesora wirtualnego kolejne pary wywołań Deactivate i Activate mogą się ze sobą ścigać. Oznacza to, że usługa Resource Manager może odbierać wywołanie przed odebraniem Deactivate wywołaniaActivate, dla którego została ona przeznaczona.

Po aktywowaniu katalogu głównego procesora wirtualnego należy zasygnalizować usłudze Resource Manager, że ten katalog główny procesora wirtualnego jest obecnie zajęty pracą. Jeśli harmonogram nie może odnaleźć żadnej pracy do wykonania w tym katalogu głównym, należy wywołać Deactivate metodę informującą usługę Resource Manager, że katalog główny procesora wirtualnego jest bezczynny. Usługa Resource Manager używa tych danych do równoważenia obciążenia systemu.

invalid_argument parametr jest zgłaszany, jeśli argument pContext ma wartość NULL.

invalid_operation jest zgłaszany, jeśli argument pContext nie reprezentuje kontekstu wykonywania, który został ostatnio wysłany przez ten katalog główny procesora wirtualnego.

Czynność aktywowania katalogu głównego procesora wirtualnego zwiększa poziom subskrypcji bazowego wątku sprzętowego o jeden. Aby uzyskać więcej informacji na temat poziomów subskrypcji, zobacz IExecutionResource::CurrentSubscriptionLevel.

IVirtualProcessorRoot::D eactivate — Metoda

Powoduje, że serwer proxy wątku jest obecnie wykonywany w tym katalogu głównym procesora wirtualnego, aby zatrzymać wysyłanie kontekstu wykonywania. Serwer proxy wątku wznowi wykonywanie wywołania Activate metody .

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

Parametry

Pcontext
Kontekst, który jest obecnie wysyłany przez ten katalog główny.

Wartość zwracana

Wartość logiczna. Wartość wskazuje, że serwer proxy wątku true zwrócony z Deactivate metody w odpowiedzi na wywołanie Activate metody . Wartość false wskazuje, że serwer proxy wątku zwrócony z metody w odpowiedzi na zdarzenie powiadomienia w usłudze Resource Manager. W harmonogramie wątków z możliwością schedulable (UMS) w trybie użytkownika oznacza to, że elementy zostały wyświetlone na liście uzupełniania harmonogramu, a harmonogram jest wymagany do ich obsługi.

Uwagi

Użyj tej metody, aby tymczasowo zatrzymać wykonywanie katalogu głównego procesora wirtualnego, gdy nie można znaleźć żadnej pracy w harmonogramie. Wywołanie Deactivate metody musi pochodzić z Dispatch metody kontekstu wykonywania, z którego ostatnio aktywowano katalog główny procesora wirtualnego. Innymi słowy, serwer proxy wątku wywołujący metodę Deactivate musi być tym, który jest obecnie wykonywany w katalogu głównym procesora wirtualnego. Wywołanie metody w katalogu głównym procesora wirtualnego, którego nie wykonujesz, może spowodować niezdefiniowane zachowanie.

Zdezaktywowany katalog główny procesora wirtualnego może zostać wybudzony za pomocą wywołania Activate metody z tym samym argumentem, który został przekazany do Deactivate metody. Harmonogram jest odpowiedzialny za zapewnienie, że wywołania Activate metod i Deactivate są sparowane, ale nie muszą być odbierane w określonej kolejności. Usługa Resource Manager może obsługiwać odbieranie wywołania metody przed odebraniem wywołania ActivateDeactivate metody, dla której została ona przeznaczona.

Jeśli element główny procesora wirtualnego obudzi się i wartość zwracana z Deactivate metody jest wartością false, harmonogram powinien wykonać zapytanie dotyczące listy uzupełniania UMS za pośrednictwem IUMSCompletionList::GetUnblockNotifications metody, wykonać działania na tych informacjach, a następnie wywołać Deactivate metodę ponownie. Należy to powtórzyć do czasu, Deactivate aż metoda zwróci wartość true.

invalid_argument parametr jest zgłaszany, jeśli argument pContext ma wartość NULL.

invalid_operation jest zgłaszany, jeśli katalog główny procesora wirtualnego nigdy nie został aktywowany lub argument pContext nie reprezentuje kontekstu wykonywania, który został ostatnio wysłany przez ten katalog główny procesora wirtualnego.

Czynność dezaktywowania katalogu głównego procesora wirtualnego zmniejsza poziom subskrypcji bazowego wątku sprzętowego o jeden. Aby uzyskać więcej informacji na temat poziomów subskrypcji, zobacz IExecutionResource::CurrentSubscriptionLevel.

IVirtualProcessorRoot::EnsureAllTasksVisible — Metoda

Powoduje, że dane przechowywane w hierarchii pamięci poszczególnych procesorów stają się widoczne dla wszystkich procesorów w systemie. Gwarantuje to wykonanie pełnego ogrodzenia pamięci na wszystkich procesorach przed zwróceniem metody.

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

Parametry

Pcontext
Kontekst, który jest obecnie wysyłany przez ten katalog główny procesora wirtualnego.

Uwagi

Ta metoda może być przydatna, gdy chcesz zsynchronizować dezaktywację katalogu głównego procesora wirtualnego z dodawaniem nowej pracy do harmonogramu. Ze względu na wydajność możesz zdecydować się na dodanie elementów roboczych do harmonogramu bez wykonywania bariery pamięci, co oznacza, że elementy robocze dodane przez wątek wykonywany na jednym procesorze nie są natychmiast widoczne dla wszystkich innych procesorów. Korzystając z tej metody w połączeniu z Deactivate metodą, możesz upewnić się, że harmonogram nie dezaktywuje wszystkich elementów głównych procesora wirtualnego, podczas gdy elementy robocze istnieją w kolekcjach harmonogramu.

Wywołanie EnsureAllTasksVisibleThe metody musi pochodzić z Dispatch metody kontekstu wykonywania, z którego ostatnio aktywowano katalog główny procesora wirtualnego. Innymi słowy, serwer proxy wątku wywołujący metodę EnsureAllTasksVisible musi być tym, który jest obecnie wykonywany w katalogu głównym procesora wirtualnego. Wywołanie metody w katalogu głównym procesora wirtualnego, którego nie wykonujesz, może spowodować niezdefiniowane zachowanie.

invalid_argument parametr jest zgłaszany, jeśli argument pContext ma wartość NULL.

invalid_operation jest zgłaszany, jeśli katalog główny procesora wirtualnego nigdy nie został aktywowany lub argument pContext nie reprezentuje kontekstu wykonywania, który został ostatnio wysłany przez ten katalog główny procesora wirtualnego.

IVirtualProcessorRoot::GetId — Metoda

Zwraca unikatowy identyfikator katalogu głównego procesora wirtualnego.

virtual unsigned int GetId() const = 0;

Wartość zwracana

Identyfikator liczby całkowitej.

Zobacz też

Przestrzeń nazw współbieżności