Структура IUMSThreadProxy
Абстракция для потока выполнения. Если требуется предоставлять для планировщика потоки планировщика в пользовательском режиме (UMS), задайте для элемента политики планировщика SchedulerKind
значение UmsThreadDefault
и реализуйте интерфейс IUMSScheduler
. Потоки UMS поддерживаются только в 64-разрядных операционных системах Windows 7 и более поздних версий.
Синтаксис
struct IUMSThreadProxy : public IThreadProxy;
Участники
Открытые методы
Имя | Описание |
---|---|
IUMSThreadProxy::EnterCriticalRegion | Вызывается для ввода критического региона. В критическом регионе планировщик не будет наблюдать асинхронные операции блокировки, которые происходят во время региона. Это означает, что планировщик не будет повторно введен для ошибок страниц, приостановки потоков, вызовов асинхронных процедур ядра (APCs) и т. д. для потока UMS. |
IUMSThreadProxy::EnterHyperCriticalRegion | Вызывается для ввода гиперкритических регионов. При использовании гиперкритических регионов планировщик не будет наблюдать за блокирующими операциями, которые происходят во время региона. Это означает, что в планировщик не будет повторных входов для блокирующих вызовов функции, блокирующих попыток получения блокировки, сбоев страниц, приостановок потока, вызовов асинхронных процедур ядра (APC) и т. п. для потока UMS. |
IUMSThreadProxy::ExitCriticalRegion | Вызывается для выхода из критической области. |
IUMSThreadProxy::ExitHyperCriticalRegion | Вызывается для выхода из гиперкритических регионов. |
IUMSThreadProxy::GetCriticalRegionType | Возвращает тип критического региона, в который находится прокси-сервер потока. Так как гиперкритических регионов — это супермножество критических регионов, если код вошел в критически важный регион, а затем будет возвращен гиперкритичный регион InsideHyperCriticalRegion . |
Иерархия наследования
IUMSThreadProxy
Требования
Заголовок: concrtrm.h
Пространство имен: concurrency
Метод IUMSThreadProxy::EnterCriticalRegion
Вызывается для ввода критического региона. В критическом регионе планировщик не будет наблюдать асинхронные операции блокировки, которые происходят во время региона. Это означает, что планировщик не будет повторно введен для ошибок страниц, приостановки потоков, вызовов асинхронных процедур ядра (APCs) и т. д. для потока UMS.
virtual int EnterCriticalRegion() = 0;
Возвращаемое значение
Новая глубина критического региона. Критически важные регионы повторно используются.
Метод IUMSThreadProxy::EnterHyperCriticalRegion
Вызывается для ввода гиперкритических регионов. При использовании гиперкритических регионов планировщик не будет наблюдать за блокирующими операциями, которые происходят во время региона. Это означает, что в планировщик не будет повторных входов для блокирующих вызовов функции, блокирующих попыток получения блокировки, сбоев страниц, приостановок потока, вызовов асинхронных процедур ядра (APC) и т. п. для потока UMS.
virtual int EnterHyperCriticalRegion() = 0;
Возвращаемое значение
Новая глубина гиперкритических регионов. Гиперкритических регионов повторно применяются.
Замечания
Планировщик должен быть чрезвычайно осторожным в том, какие методы он вызывает и что блокирует он получает в таких регионах. Если код в таком регионе блокирует блокировку, которая хранится планировщиком, отвечает за планирование, может возникнуть взаимоблокировка.
Метод IUMSThreadProxy::ExitCriticalRegion
Вызывается для выхода из критической области.
virtual int ExitCriticalRegion() = 0;
Возвращаемое значение
Новая глубина критического региона. Критически важные регионы повторно используются.
Метод IUMSThreadProxy::ExitHyperCriticalRegion
Вызывается для выхода из гиперкритических регионов.
virtual int ExitHyperCriticalRegion() = 0;
Возвращаемое значение
Новая глубина гиперкритических регионов. Гиперкритических регионов повторно применяются.
Метод IUMSThreadProxy::GetCriticalRegionType
Возвращает тип критического региона, в который находится прокси-сервер потока. Так как гиперкритических регионов — это супермножество критических регионов, если код вошел в критически важный регион, а затем будет возвращен гиперкритичный регион InsideHyperCriticalRegion
.
virtual CriticalRegionType GetCriticalRegionType() const = 0;
Возвращаемое значение
Тип критического региона, в который находится прокси-сервер потока.