IUMSThreadProxy 结构
执行线程的抽象。 如果想要计划程序获得用户模式计划 (UMS) 线程,则将计划程序策略元素 SchedulerKind
的值设置为 UmsThreadDefault
,并实现 IUMSScheduler
接口。 UMS 线程仅在具有 Windows 7 或更高版本的 64 位操作系统上受到支持。
语法
struct IUMSThreadProxy : public IThreadProxy;
成员
公共方法
名称 | 描述 |
---|---|
IUMSThreadProxy::EnterCriticalRegion | 调用以进入关键区域。 在关键区域内时,计划程序不会观察在该区域期间发生的异步阻塞操作。 这意味着计划程序将不再重新进入 UMS 线程的页面错误、线程挂起、内核异步过程调用 (APC) 等。 |
IUMSThreadProxy::EnterHyperCriticalRegion | 调用以进入超关键区域。 在超关键区域内时,计划程序不会观察在该区域期间发生的阻塞操作。 这意味着计划程序将不再重新进入 UMS 线程的阻止函数调用、阻止锁定获取尝试、页面错误、线程挂起、内核异步过程调用 (APC) 等。 |
IUMSThreadProxy::ExitCriticalRegion | 调用以退出关键区域。 |
IUMSThreadProxy::ExitHyperCriticalRegion | 调用以退出超关键区域。 |
IUMSThreadProxy::GetCriticalRegionType | 返回线程代理所在的关键区域类型。 由于超关键区域是关键区域的超集,如果代码已进入关键区域,然后进入超关键区域,则返回 InsideHyperCriticalRegion 。 |
继承层次结构
IUMSThreadProxy
要求
标头:concrtrm.h
命名空间: 并发
IUMSThreadProxy::EnterCriticalRegion 方法
调用以进入关键区域。 在关键区域内时,计划程序不会观察在该区域期间发生的异步阻塞操作。 这意味着计划程序将不再重新进入 UMS 线程的页面错误、线程挂起、内核异步过程调用 (APC) 等。
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;
返回值
线程代理所在的关键区域类型。