Поделиться через


Структура 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 .

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

IThreadProxy

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;

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

Тип критического региона, в который находится прокси-сервер потока.

См. также

Пространство имен concurrency
Структура IUMSScheduler