IVirtualProcessorRoot — Struktura
Abstrakcja wątku sprzętowego, na którym może być wykonywany serwer proxy wątku.
Składnia
struct IVirtualProcessorRoot : public IExecutionResource;
Elementy członkowskie
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
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 Activate
Deactivate
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.