Структура IVirtualProcessorRoot

Абстракция для аппаратного потока, в котором может выполняться прокси-поток.

Синтаксис

struct IVirtualProcessorRoot : public IExecutionResource;

Участники

Открытые методы

Имя Описание
IVirtualProcessorRoot::Activate Приводит к тому, что прокси-сервер потока, связанный с интерфейсом pContext контекста выполнения, начнет выполняться в этом корневом каталоге виртуального процессора.
IVirtualProcessorRoot::D eactivate Приводит к тому, что прокси-сервер потока, выполняемый в данный момент в корневом каталоге виртуального процессора, перестает отправлять контекст выполнения. Прокси-сервер потока возобновляет выполнение вызова Activate метода.
IVirtualProcessorRoot::EnsureAllTasksVisible Приводит к тому, что данные, хранящиеся в иерархии памяти отдельных процессоров, становятся видимыми для всех процессоров в системе. Это гарантирует, что на всех процессорах выполняется полная забор памяти перед возвратом метода.
IVirtualProcessorRoot::GetId Возвращает уникальный идентификатор для корневого каталога виртуального процессора.

Замечания

Каждый корневой каталог виртуального процессора имеет связанный ресурс выполнения. Интерфейс IVirtualProcessorRoot наследует от интерфейса IExecutionResource . Несколько корней виртуального процессора могут соответствовать одному и тому же базовому потоку оборудования.

Resource Manager предоставляет корням виртуальных процессоров планировщикам в ответ на запросы ресурсов. Планировщик может использовать корневой каталог виртуального процессора для выполнения работы, активировав его с помощью контекста выполнения.

Иерархия наследования

IExecutionResource

IVirtualProcessorRoot

Требования

Заголовок: concrtrm.h

Пространство имен: concurrency

Метод IVirtualProcessorRoot::Activate

Приводит к тому, что прокси-сервер потока, связанный с интерфейсом pContext контекста выполнения, начнет выполняться в этом корневом каталоге виртуального процессора.

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

Параметры

pContext
Интерфейс контекста выполнения, который будет отправлен в этом корневом каталоге виртуального процессора.

Замечания

Resource Manager предоставит прокси-сервер потока, если он не связан с интерфейсом контекста выполнения pContext

Этот Activate метод можно использовать для запуска работы с новым корневым процессором виртуального процессора, возвращаемого диспетчером ресурсов, или для возобновления прокси-сервера потока в корневом каталоге виртуального процессора, который деактивирован или будет деактивирован. Дополнительные сведения об деактивации см. в разделе IVirtualProcessorRoot::D eactivate . При возобновлении деактивированного корневого каталога виртуального процессора параметр pContext должен совпадать с параметром, используемым для деактивации корневого каталога виртуального процессора.

После первого активации корневого каталога виртуального процессора последующие пары вызовов Deactivate и Activate могут гонки друг с другом. Это означает, что диспетчер ресурсов может получить звонок Activate , прежде чем он получит Deactivate звонок, для него он был предназначен.

При активации корневого каталога виртуального процессора вы сигнализируете resource Manager о том, что этот корневой каталог виртуального процессора в настоящее время занят работой. Если планировщик не может найти какую-либо работу для выполнения в этом корневом каталоге, он должен вызвать Deactivate метод, сообщающий Resource Manager, что корневой каталог виртуального процессора неактивен. Resource Manager использует эти данные для балансировки нагрузки системы.

invalid_argument вызывается, если аргумент pContext имеет значение NULL.

invalid_operation вызывается, если аргумент pContext не представляет контекст выполнения, который был недавно отправлен этим корнем виртуального процессора.

Действие активации корня виртуального процессора увеличивает уровень подписки базового аппаратного потока на один. Дополнительные сведения об уровнях подписки см. в разделе IExecutionResource::CurrentSubscriptionLevel.

Метод IVirtualProcessorRoot::D eactivate

Приводит к тому, что прокси-сервер потока, выполняемый в данный момент в корневом каталоге виртуального процессора, перестает отправлять контекст выполнения. Прокси-сервер потока возобновляет выполнение вызова Activate метода.

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

Параметры

pContext
Контекст, который в настоящее время отправляется этим корнем.

Возвращаемое значение

Значение boolean. Значение true указывает, что прокси-сервер потока, возвращенный методом Deactivate в ответ на вызов Activate метода. Значение false указывает, что прокси-сервер потока, возвращенный методом в ответ на событие уведомления в Resource Manager. В планировщике потоков в пользовательском режиме (UMS) это означает, что элементы появились в списке завершения планировщика, а планировщик требуется для их обработки.

Замечания

Используйте этот метод, чтобы временно остановить выполнение корневого каталога виртуального процессора, если вы не можете найти любую работу в планировщике. Вызов Deactivate метода должен происходить из Dispatch метода контекста выполнения, с которым был активирован корневой каталог виртуального процессора. Другими словами, прокси-сервер потока, вызывающий Deactivate метод, должен быть тем, который в настоящее время выполняется в корневом каталоге виртуального процессора. Вызов метода в корневом каталоге виртуального процессора, на который вы не выполняете, может привести к неопределенному поведению.

Деактивированный корень виртуального процессора может проснуться с вызовом Activate метода с тем же аргументом, который был передан методу Deactivate . Планировщик отвечает за обеспечение связывания вызовов Activate и Deactivate методов, но они не требуются для получения в определенном порядке. Resource Manager может обрабатывать получение вызова метода, прежде чем он получает вызов ActivateDeactivate метода, для него он был предназначен.

Если корневой каталог виртуального процессора просыпается и возвращаемое значение из Deactivate метода является значением false, планировщик должен запрашивать список завершения UMS с помощью IUMSCompletionList::GetUnblockNotifications метода, действовать по этой информации, а затем снова вызывать Deactivate метод. Это должно повторяться до тех пор, Deactivate пока метод не возвращает значение true.

invalid_argument вызывается, если аргумент pContext имеет значение NULL.

invalid_operation Вызывается, если корневой каталог виртуального процессора никогда не был активирован, или аргумент pContext не представляет контекст выполнения, который был недавно отправлен этим корнем виртуального процессора.

Действие деактивации корня виртуального процессора уменьшает уровень подписки базового аппаратного потока на один. Дополнительные сведения об уровнях подписки см. в разделе IExecutionResource::CurrentSubscriptionLevel.

Метод IVirtualProcessorRoot::EnsureAllTasksVisible

Приводит к тому, что данные, хранящиеся в иерархии памяти отдельных процессоров, становятся видимыми для всех процессоров в системе. Это гарантирует, что на всех процессорах выполняется полная забор памяти перед возвратом метода.

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

Параметры

pContext
Контекст, который в настоящее время отправляется этим корнем виртуального процессора.

Замечания

Этот метод может оказаться полезным, если вы хотите синхронизировать деактивацию корня виртуального процессора с добавлением новой работы в планировщик. По соображениям производительности вы можете решить добавить рабочие элементы в планировщик без выполнения барьера памяти, что означает, что рабочие элементы, добавленные потоком, выполняемым на одном процессоре, не сразу видны всем остальным процессорам. Используя этот метод в сочетании с методом Deactivate , вы можете убедиться, что планировщик не деактивирует все корни виртуального процессора во время существования рабочих элементов в коллекциях планировщика.

Вызов EnsureAllTasksVisibleThe метода должен происходить из Dispatch метода контекста выполнения, с которым был активирован корневой каталог виртуального процессора. Другими словами, прокси-сервер потока, вызывающий EnsureAllTasksVisible метод, должен быть тем, который в настоящее время выполняется в корневом каталоге виртуального процессора. Вызов метода в корневом каталоге виртуального процессора, на который вы не выполняете, может привести к неопределенному поведению.

invalid_argument вызывается, если аргумент pContext имеет значение NULL.

invalid_operation Вызывается, если корневой каталог виртуального процессора никогда не был активирован, или аргумент pContext не представляет контекст выполнения, который был недавно отправлен этим корнем виртуального процессора.

Метод IVirtualProcessorRoot::GetId

Возвращает уникальный идентификатор для корневого каталога виртуального процессора.

virtual unsigned int GetId() const = 0;

Возвращаемое значение

Целочисленный идентификатор.

См. также

Пространство имен concurrency