Метод IVirtualProcessorRoot::EnsureAllTasksVisible
Приводит к тому, что данные, хранящиеся в иерархии памяти отдельных процессоров, становятся видимыми для всех процессоров в системе. Это гарантирует, что полная памяти граница была выполнена на всех процессорах перед возвратом метода.
virtual void EnsureAllTasksVisible(
_Inout_ IExecutionContext *pContext
) =0;
Параметры
- pContext
Контекст, который является в настоящий момент осуществляемым этим корнем виртуального процессора.
Заметки
Эти методы могут оказаться полезными при необходимости синхронизации деактивации корня виртуального процессора с добавлением новой работы в планировщик. Для повышения производительности можно добавлять рабочие элементы на планировщик без выполнения барьера памяти, что означает, что рабочие элементы, добавленные потоком, выполняющимся на одном процессоре, не видны сразу для всех процессоров. С помощью этого метода в сочетании с методом Deactivate можно обеспечить, что ваш планировщик не выполняет деактивирование всех его корней виртуальных процессоров, а рабочие элементы существуют в коллекциях на планировщике.
Вызов метода EnsureAllTasksVisibleThe должен инициироваться в методе Dispatch контекста выполнения, с которым корневой виртуальный процессор последний раз был активирован. Другими словами прокси поток, вызывающий метод EnsureAllTasksVisible, должен быть тот, который в настоящее время выполняется на корневой виртуальный процессор. Вызов метода на корневой виртуальный процессор, который не выполняется, может привести к неопределенному поведению.
invalid_argument выбрасывается, если аргумент pContext имеет значение NULL.
invalid_operation выбрасывается, если корень виртуального процессора не активирован или аргумент pContext не представляет контекст выполнения, который был отправлен недавно этим корневой виртуальный процессор.
Требования
Заголовок: concrtrm.h
Пространство имен: concurrency