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